繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM