在结构中操纵向量中的项

manipulating items in a vector within a struct

本文关键字:向量 操纵 结构      更新时间:2023-10-16

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

这里有一些简单的代码来说明我所说的:

#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

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

myfile.test_file[0].test_int = myint;

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

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