【问题标题】:Displaying vectors on Screen在屏幕上显示矢量
【发布时间】:2017-04-08 02:27:23
【问题描述】:

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

我认为错误出现在最终嵌套循环中,但我不确定。提前致谢。

【问题讨论】:

  • 没有什么能立刻让我眼前一亮。但是您是否尝试过调试程序?使用gdb?您应该能够运行它,然后回溯到发生错误的位置

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


【解决方案1】:
std:vector<std::vector<int> > arrays(numArrays);

在这里你用numArraysvector&lt;int&gt;s初始化你的向量。
但随后您追加您的新向量。意思是你最后有2*numArrays 向量。

崩溃来自前半部分向量:

  • j&lt;arrays.at(i).size() - 1:size() 中的负 1 返回无符号 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()ness 的测试。

【讨论】:

  • 我还是有点迷茫。我该如何解决这个问题?我厌倦了删除那条线,但它仍然崩溃了。 (我对 C++ 非常陌生)
  • @ChristopherLittlewood 将此行 std:vector&lt;std::vector&lt;int&gt; &gt; arrays(numArrays); 更改为此 std:vector&lt;std::vector&lt;int&gt; &gt; arrays;。程序将关闭,因为std::vector&lt;T&gt;::at() 将抛出异常,顺便说一句,您没有尝试捕获此类异常。但是我不相信你会需要。只需进行建议的更改,它应该可以工作。
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多