提问者:小点点

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


我正在学习使用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;
}

共2个答案

匿名用户

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的大小和容量。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(简单|向量|c++|程序|工作)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?