在屏幕上显示矢量

时间:2017-04-08 02:27:23

标签: c++ arrays vector nested-loops iostream

我一直在阅读有关如何创建一组数组并使用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;
}

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

1 个答案:

答案 0 :(得分:1)

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

在这里,您使用numArraysvector<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添加测试。