我不确定,但我想我已经读过你应该只删除一个不为空的向量。 所以现在我总是在删除向量之前检查:

if (!vector.empty()) {
    vector.clear();
}

但是,我不再发现有关此步骤是否不必要的任何信息。

是否禁止在空向量上使用clear

#1楼 票数:4

不需要支票,

并降低 IMO 的可读性。

#2楼 票数:2 已采纳

实际上,在清除空序列或关联容器时存在与未定义行为相关的问题,但现在已修复,并且在事先检查std::vector是否为空的情况下调用std::vector::clear完全安全的.

  ask by starcow translate from so

未解决问题?本站智能推荐:

2回复

矢量迭代器不兼容

我目前正在为C ++开发一个图形库,现在卡在运行时调试模式中出现断言错误的位置。 我也在这里看了一些关于SO的问题,但没有一个问题和答案引导我找到解决方案。 在一些论坛中阅读后,我发现这个错误的发生是因为一旦矢量内容发生变化,迭代器就会失效。 (例如,当使用erase() )但正如你在我的
1回复

我们需要在类的构造函数的开头清除向量类型的类成员吗?

我试图了解此 pdf 中类的类定义: http : //finance.bi.no/~bernt/gcc_prog/recipes/recipes.pdf (第 61-62 页)。 我有问题的代码部分如下。 以下是头文件: 下面是定义类方法的代码文件: 如果看构造函数的两个定义和析构函数的定
4回复

将矢量附加到自身的好方法

我想复制向量的内容,并希望它们被附加在原始向量的末尾,即v[i]=v[i+n] for i=0,2,...,n-1 我正在寻找一种很好的方法,而不是循环。 我看到了std::vector::insert但迭代版本禁止迭代器为*this (即行为未定义)。 我也试过std::copy
1回复

矢量中的线程无法连接

我想在向量中存储一组线程,并在退出程序之前将它们全部加入。 尝试加入第一个线程时,无论我在集合中放置多少,我都会收到以下错误: 这是一些演示我的问题的简单代码: 我正在使用以下内容构建它(尝试过clang ++ 4.2.1和g ++ 5.3.1): 我在互联网上看到很多
2回复

检查一个向量是否包含另一个向量的子串

我有文件名,我需要检查这些文件是否以矢量扩展名结尾。 我想使用库中的某些算法来代替我的操作,有什么办法吗?
3回复

用平坦的记忆结构替换矢量矢量

我有以下类型: 其中内部向量的大小始终为2.问题是,向量在内存中是非连续的。 我想用连续的东西替换内部向量,以便我可以抛出扁平数组: 如果新类型有[]运算符会很好,所以我不必更改整个代码。 (如果有必要,我也可以自己实施)。 我的想法是: 要么 这些在内存中
3回复

插入矢量变换

我之前发布了关于连接两个std::vector s的最佳方法的问题 ,其中必须首先转换一个向量。 虽然使用std::transform的显而易见的解决方案可能不是理论上最优的解决方案,但多容量检查的成本不太可能是显着的。 但是,如果我们考虑插入一个必须转换为另一个向量的向量的更普遍的问题
1回复

矢量与不同类型的向量

我想构建一个向量的向量。 这个问题已经多次发布在SO上,但我找不到令人满意的答案。 那是因为: 每个向量可以有不同的类型 我不知道编译时的类型 我不知道它将包含多少向量 基本上我希望以后可以在伪代码中做类似的事情 然后我希望能够做到这一点 我