Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个简单的向量c++;程序工作?_C++ - Fatal编程技术网

C++ 为什么这个简单的向量c++;程序工作?

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 =

我正在学习使用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;
}
#包括
#包括
使用名称空间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)。