当前位置: 首页 > 知识库问答 >
问题:

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

厉高逸
2023-03-14

我正在学习使用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个答案

澹台文博
2023-03-14

在执行代码时

vector<int> vec;

您创建了一个名为vec的对象,它没有元素,vec.size()将为零。

因此vec.begin()返回的内容与vec.end()返回的内容相同。

通过执行vec.insert(it,-1);,您将在vec的范围之外插入一个值。

那是未定义的行为。

请尝试vec.emplace_back(-1)vec.resize(2)。它们扩展了vec的大小和容量。

鲁光霁
2023-03-14

vec.insert(it,-1);使it无效。

您应该使用it=vec.insert(it,-1);,这将使it保持有效。

您可以看到文档:

https://en.cppreference.com/w/cpp/container/vector

名为“迭代器无效”的部分

 类似资料:
  • 我试图制作一个基本的C程序来读取一个文件,但由于某种原因,当我使用运行它时<代码>/Test1 Test1。txt我得到“错误:'s'可能在未初始化的情况下用于此函数”。

  • 为什么这不会增加?我正在批处理文件中使用这个。它做任何事情都是正确的,只是没有增加。我做错了什么? 编辑:这不是重复,这是一个完全不同的问题。

  • 我有这个项目。然后我做以下步骤: 转到 预期结果:错误消息(在浏览器中呈现) 白标签错误页 此应用程序没有 /error的显式映射,因此您将此视为一种退回。星期二八月27 16:59:23CEST 2019有一个意外的错误(类型=未找到,状态=404)。没有可用的消息 如何更改附加的代码,使文件索引代替此错误。是否呈现xhtml? 更新1:如果我去,我得到这个错误: 白标签错误页此应用程序没有/E

  • 在这个打印从1到10000000的所有数字、Haskell版本和C版本的简单程序中,为什么Haskell版本如此缓慢,以及哪些命令有助于学习如何提高Haskell程序的性能? 下面是一份报告,包含重现我激动人心的事件所需的所有细节,制作报告时会打印出来源,包括Makefile的来源:

  • 现在我正在学习C++我做了我的第一个小程序加法计算器,我写两个数字,它把它们相加。你能告诉我为什么我的输出是0吗? 输出:

  • chrome浏览器 onclick链接 O:https://www.w3schools.com窗口打开 X:about:空白窗口打开