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