我正在学习使用stl向量,这是奇怪的,这个程序不能工作。这有什么问题?如果我想用Vector实现同样的功能,应该怎么做呢?
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> vec;
vector<int>::iterator it;
vector<int>::iterator temp;
it = vec.begin();
vec.insert(it, -1);
it++;
vec.insert(it, 2);
for(temp = vec.begin();temp!=vec.end();temp++)
cout<<*temp<<' ';
return 0;
}
vec.insert(it,-1);
使it
无效。
您应该使用it=vec.insert(it,-1);
,这将使it
保持有效。
您可以看到文档:
https://en.cppreference.com/w/cpp/container/vector
名为“迭代器无效”的部分
在执行代码时
vector<int> vec;
您创建了一个名为vec的对象,它没有元素,vec.size()
将为零。
因此vec.begin()
返回的内容与vec.end()
返回的内容相同。
通过执行vec.insert(it,-1);
,您将在vec
的范围之外插入一个值。
那是未定义的行为。
请尝试vec.emplace_back(-1)
或vec.resize(2)
。它们扩展了vec
的大小和容量。