将值分配给多维向量

时间:2017-04-13 05:51:18

标签: c++ multidimensional-array vector

我正在尝试为多维向量赋值,但我总是从visual studio中得到“R6010 - abort()”错误。

我想要的是一个二维向量,其中第二个维度与所需的一样大。 (重要的是因为我现在没有多少输入值,我想稍后使用myvector.at(i).size();

所以要简短地说明:为什么以下示例不起作用?

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;


int main()
{

vector < vector < int > > Vektor;
Vektor.resize(10);
int tmp;

while (true) {
    cout << "Please enter a value: " << endl;
    cin >> tmp;
    int size;

    if (tmp > 0 & tmp < 11) {
        Vektor.at(tmp - 1).push_back(tmp);
    }

    for (int i = 1; i < 11; i++) {
        size = Vektor.at(i).size();
        for (int j = 0; j < size; j++) {
            cout << "Value at " << i << " , " << j << " : " << Vektor.at(i).at(j) << endl;
        }
    }
}

return 0;

}

2 个答案:

答案 0 :(得分:1)

您在行中使用了错误的索引:

for (int i = 1; i < 11; i++) {
    size = Vektor.at(i).size();

将行更改为:

             |      ||
             v      vv 
for (int i = 0; i < 10; i++) {
    size = Vektor.at(i).size();

答案 1 :(得分:0)

正如@RSahu已经回答的那样,你在循环中使用了错误的索引。我建议您避免硬编码值。而不是更正值。

这可以通过多种方式完成。通过使用vector.size(),您的代码很容易修复。只需使用这两行而不是当前的两行:

if (tmp > 0 & tmp <= Vektor.size()) {

for (int i = 0; i < Vektor.size() ; i++) {

另一种打印方式可能是

size_t i = 0;
for (const auto& v : Vektor)
{
    size_t j = 0;
    for (const auto e : v)
    {
        cout << "Value at " << i << " , " << j << " : " << e << endl;
        ++j;
    }
    ++i;
}