C++ 为什么这个简单的向量c++;程序工作?
我正在学习使用stl向量,奇怪的是这个程序不能工作。怎么了?如果我想用vector实现相同的函数,应该怎么做C++ 为什么这个简单的向量c++;程序工作?,c++,C++,我正在学习使用stl向量,奇怪的是这个程序不能工作。怎么了?如果我想用vector实现相同的函数,应该怎么做 #include <vector> #include <iostream> using namespace std; int main() { vector<int> vec; vector<int>::iterator it; vector<int>::iterator temp; it =
#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;
}
#包括
#包括
使用名称空间std;
int main()
{
向量向量机;
向量::迭代器;
向量::迭代器温度;
it=vec.begin();
矢量插入(it,-1);
it++;
矢量插入(it,2);
对于(temp=vec.begin();temp!=vec.end();temp++)
在执行代码时不能
vector<int> vec;
vec;
您创建了一个名为vec的对象,它没有元素,vec.size()
将为零
因此vec.begin()
返回的内容与vec.end()
返回的内容相同
通过执行vec.insert(it,-1);
插入的值超出了vec
的范围。
这是未定义的行为
否,vec.insert(it,-1)
工作正常,但vec.insert(it,-1)
会导致向量为其第一个元素重新分配内存
那是无效的它
尝试vec.emplace\u back(-1)
或vec.resize(2)
。它们扩展vec
的大小和容量。vec.insert(it,-1);
使无效
您更应该使用it=vec.insert(it,-1);
这将使it
保持有效
您可以查看以下文档:
名为“迭代器无效”的节或者,看看这个伟大的问题和答案:什么是不适合你的?我们不是巫师,如果你需要得到重新分配,你可以从代码中得到什么,你期望得到什么。如果在C++中改变了操作,你就不应该依赖于迭代器。不要预先声明C++中的变量。code>对于迭代器来说更容易(也更易读)为什么你认为有错误?当你遇到编译器错误时,请把它包括在问题中。当输出不是你期望的,请告诉我们你期望的是什么,你得到的是什么。看起来vector::push_back()
就是你需要的。“通过执行vec.insert(it,-1);
您正在插入一个超出vec
范围的值。”为什么?正如pos
参数中所解释的:“将插入内容的迭代器。pos可能是end()迭代器”(emphasis-mine)。