为什么不擦除矢量内容
Why does not the vector content be erased?
如果清除 v1,内容会在 v2 中消失吗?为什么它不会消失?原因是什么?
vector<string> v1;
vector<vector<string>> v2;
v1.push_back("a");
v1.push_back("b");
v2.push_back(v1);
v1.clear();
您的分配是副本,而不是原始 v1。将 V1 的副本放入 V2 后,它们是分开的。因此,无论您对 V1 做了什么,它都不会对 V2 执行任何操作。你可以尝试了解向量是如何做的,分配操作是复制而不是引用。
复制到 v2 后将删除 v1 数据,
v2已经保存了v1数据,所以对v2没有影响
好问题。这是我们所有人都必须一遍又一遍地问自己的问题,以了解正在使用的内存发生了什么。 当通过将另一个对象推入矢量来创建矢量元素时...
v2.push_back(v1);
制作 v1 的副本以插入到 v2 中。
std::vector 使所有内存保持连续,因此在使用 std::vector 时很少有机会避免此副本。
对于其他类型的 STL 容器,如果 v1 的生命周期在插入时结束,则可能避免复制,这意味着使用 move 构造函数。 但是,std::vector通常不会发生这种情况。
相关文章:
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 为什么擦除方法会影响结束方法
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 当我不关心顺序并且没有重复项时,更快的擦除删除成语?
- 为什么在功能内擦除元素后不列出更新?
- 如何在 c++ 中打开文件,而不擦除其内容而不附加它?
- 为什么没有std::擦除
- 矢量擦除错误,无法删除不完整的类型
- 为什么不擦除矢量内容
- 为什么我不能像这样擦除矢量的所有元素?
- 矢量擦除函数不起作用 c++
- 我希望迭代器从映射或集合中擦除元素不会比对数差
- 矢量上的擦除操作不起作用
- C++,从集合中提取的值在从集合中擦除时不会出现在集合中
- 矢量擦除功能不工作(简单的代码)
- 为什么擦除End-Iterator不会给shared_ptr分段错误
- 为什么c++ 11/Boost ' unordered_map '在擦除时不重新散列?
- 为什么 std::lock_guard/std::unique_lock 不使用类型擦除?
- 矢量中的擦除功能不删除指针?
- 为什么我不能在 C++ 中使用 str.erase(str.begin() + index) 擦除字符串中的字符?