为多维向量赋值



我正在尝试为多维向量赋值,但我总是从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;

}

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

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();

正如@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;
}

最新更新