0

试图弄清楚这一点,我感到很失落。我有自己的数据结构,我计划使用向量来避免跟踪可用空间和重组,如果我使用简单的数组,我需要这样做。我不知道我只是没有正确初始化还是什么,但我所做的每一项任务似乎都消失得无影无踪。

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

#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

4

1 回答 1

1

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

    myfile.test_file[0].test_int = myint;

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

    myfile.test_file.push_back(node());
    myfile.test_file[0].test_int = myint;
于 2012-11-25T08:03:29.900 回答