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