操纵结构中向量中的项目

时间:2012-11-25 07:39:46

标签: c++ vector struct

我觉得很想弄清楚这一点。我有自己的数据结构,我计划使用向量,以避免跟踪可用空间和重新安排,如果我使用一个简单的数组,我需要做。我不知道我是不是没有正确地进行初始化或是什么,但我所做的每项任务似乎都消失得无影无踪。

这是一些简单的代码来说明我在说什么:

#include <vector>
#include <iostream>

using namespace std;

struct node
{
    int test_int;
    bool test_bool;
};

struct file
{
    vector<node> test_file;
};

int main()
{
    file myfile;
    int myint;

    cout << "Enter number: ";
    cin >> myint;

    myfile.test_file[0].test_int = myint;

    cout << "Number entered is: " << myfile.test_file[0].test_int << endl;

    return 0;
}

所以基本上它是一个结构中的向量。似乎访问向量的常规方法似乎不起作用,因为我无法读取或向向量写入任何内容,但myfile.test_file.size()之类的东西似乎有效(因为它们返回'0'来自一个新创建的结构)。试图通过myfile.test_file[0].test_int直接访问索引会导致运行时错误vector subscript out of range,就好像它实际上并不存在一样。

我没有正确初始化吗?这对我来说似乎有点荒谬,我无法理解为什么它不会那样工作。

编辑: 编辑后的代码可以更清楚地显示我所指的行为。这会编译但会产生运行时错误vector subscript out of range

1 个答案:

答案 0 :(得分:1)

编辑后的版本不起作用,因为您正在访问矢量末尾的元素:

    myfile.test_file[0].test_int = myint;

在您执行此操作之前,您需要resize()向量,或使用push_back()添加元素:

    myfile.test_file.push_back(node());
    myfile.test_file[0].test_int = myint;