我一直在阅读有关如何创建一组数组并使用C ++中的for循环填充这些数组的一些内容。无处不在说我需要使用矢量。我创建了数组并使用向量填充它们(我想)。当我编译并运行显示数组时,一切正常。当我尝试显示数组的内容时,程序编译好,但在运行时崩溃。
我正在尝试创建100个数组,每次大小增加500个元素。 (这是针对我们需要测试算法效果的任务。)
unsigned int numArrays = 100;
unsigned int arraySize = 0;
//Create holder variable:
unsigned int randomInt = 0;
//Create the arrays:
std:vector<std::vector<int> > arrays(numArrays);
for(std::size_t i=0; i< numArrays; i++){
arraySize = i * 500;
vector<int> temp;
temp.reserve(arraySize);
for(int j=0; j< arraySize; j++){
//Generate Random number:
randomInt = rand();
//Add the number to the array:
temp.push_back(randomInt);
}
arrays.push_back(temp);
}
for(int i=0; i<arrays.size(); i++){
cout << "{";
for(int j=0; j<arrays.at(i).size() - 1; j++){
cout << arrays.at(i).at(j) << ",";
}
cout << arrays.at(i).back() << "}" << endl;
}
我认为错误是在最终的嵌套循环中的某个地方,但我不确定。提前谢谢。
答案 0 :(得分:1)
std:vector<std::vector<int> > arrays(numArrays);
在这里,您使用numArrays
空vector<int>
来初始化矢量
但是你追加你的新载体。这意味着你有2*numArrays
个向量。
崩溃来自向量的前半部分:
j<arrays.at(i).size() - 1
中的减1:size()
返回无符号0,减1是最大值。arrays.at(i).back()
尝试获取不存在的最后一个元素。要解决此问题,请替换此行
std::vector<std::vector<int> > arrays(numArrays);
通过
std::vector<std::vector<int> > arrays;
arrays.reserve(numArrays);
在计算empty()
之前为非size() - 1
添加测试。