[英]Why cannot this simple vector c++ program work?
我正在学习使用 stl 向量,奇怪的是这个程序不能工作。 它有什么问题? 如果我想用向量实现相同的 function 怎么办?
#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 的 object,它没有元素并且vec.size()
将为零。
所以vec.begin()
返回的内容与vec.end()
返回的内容相同。
通过做
vec.insert(it, -1);
您正在插入一个超出vec
范围的值。 那是未定义的行为。
不, vec.insert(it, -1)
效果很好,但是vec.insert(it, -1)
导致向量为其第一个元素重新分配 memory。
这it
无效。
尝试vec.emplace_back(-1)
或vec.resize(2)
代替。 它们扩展vec
的大小和容量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.