【发布时间】:2022-01-08 16:46:37
【问题描述】:
我只是想将一个向量连接到自身,但以下代码不起作用,我无法找到问题所在。如果我的输入向量是 {1,2,1},我得到的 o/p 是 {1,2,1,1,16842944,1}。请告诉我哪里错了。我想要的输出是 [1,2,1,1,2,1]
vector<int> getConcatenation(vector<int>& nums) {
int size=nums.size();
auto itr=nums.begin();
while(size--)
{
nums.push_back(*itr);
itr++;
}
return nums;
}
【问题讨论】:
-
了解迭代器失效。 如果新的 size() 大于 capacity(),则所有迭代器和引用(包括过去的迭代器)都将失效。
-
你可以简读here。
-
如果vector需要更新容量,那么所有的迭代器都会失效。您需要另一种连接元素的方法。
-
push_back可以使所有迭代器失效。 en.cppreference.com/w/cpp/container/vector/push_back 您可以使用索引或保留足够的空间,因此不需要重新分配。 -
简单的解决方案一:对循环使用索引而不是迭代器。简单的解决方案二:Reserve内存所以容量会在循环之前设置。
标签: c++ c++11 vector std stdvector