在屏幕上显示矢量

Displaying vectors on Screen

本文关键字:显示 屏幕      更新时间:2023-10-16

我一直在阅读一些关于如何创建一定数量的数组并使用 for 循环填充这些数组的文章 C++.到处都说我需要使用向量。我已经创建了数组并使用向量填充它们(我认为(。当我编译并运行显示数组时,一切都很好。当我尝试显示数组的内容时,程序编译正常,但在运行时崩溃。

我正在尝试创建 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;
}

我假设错误在最终嵌套循环中的某个地方,但我不确定。提前谢谢。

std:vector<std::vector<int> > arrays(numArrays);

在这里,您可以使用空numArrays vector<int> s初始化向量。
但随后你附加了你的新向量。这意味着您最后有2*numArrays向量。

崩溃来自向量的前半部分:

  • 减 1 j<arrays.at(i).size() - 1size() 返回无符号 0,减 1 是最大值。
  • arrays.at(i).back()试图获取不存在的最后一个元素。

要解决此问题,请替换此行

std::vector<std::vector<int> > arrays(numArrays);

std::vector<std::vector<int> > arrays;
arrays.reserve(numArrays);

并在计算size() - 1之前添加非empty()性测试。