以下代码只是孤立的问题。我不仅要保留向量的大小,还要初始化内容,以便在大小范围内的向量元素突然分配一个值时,它不会抛出向量下标超出范围错误。我基本上替换了在大量代码中使用的固定大小的数组,我想要相同的功能,而不必添加" item.push_back(newItem)"整个文件。我尝试在刚添加的Node构造函数中放置一个for循环,但由于某种原因,.push_back()方法无法识别。
我如何不仅保留大小,还初始化构造函数中的内容?
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
int maxSize = 3;
struct Item{
string key;
string value;
};
struct Node{
int count;
vector<Item> items;
Node()
{
items.reserve(maxSize + 1);
}
};
int main(int argc, char *argv[])
{
Item item;
item.key = "Hi";
item.value = "there";
Node *p = new Node();
p->items[1] = item; // Error: vector subscript out of range
cout << p->items[1].key << " " << p->items[1].value << endl;
return 0;
}
答案 0 :(得分:2)
您正在寻找resize
而不是reserve
答案 1 :(得分:2)