在运行时填充多维矢量
Populating a multidimensional vector during runtime
显然这是不起作用的,因此代码是错误的,但是我该如何修复?对于我所知道的所有大声笑可能是错误的,但是我正在尝试创建一个在运行时创建自己的多维向量。我有一个错误: vector subscript out of range
。
#include <iostream>
#include <vector>
int main(){
int row = 0, col = 0;
std::cout << "Size of Row: "; std::cin >> row;
std::cout << "Size of Column: "; std::cin >> col;
std::vector<std::vector<int>> td;
td.resize(row * col);
for (int i = 0; i <= row; i++){
for (int j = 0; j <= col; j++){
td[i][j];
}
}
}
当您使用
时td.resize(row * col);
td
的第一维为row*col
,但其第二维仍然为空。这就是为什么您遇到错误的原因。
您应该使用
td.resize(row); // set first dimension
for (int i=0; i<row; i++) // set each second dimenstion
td[i].resize(col);
或简单
vector<vector<int>> td(row, vector<int>(col)); // has rows, each of them has cols
您需要将适当数量的内存分配给向量的向量。您可以使用以下代码明确设置空的行和列。
std::vector< std::vector<int> > td(row+1, std::vector<int>(col+1));
//+1 is needed because the loop you created is <=
否则,您可以调整循环并执行以下操作:
std::vector< std::vector<int> > td(row, std::vector<int>(col));
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
td[i][j];
}
}
td是指外向向量,因此您的调整大小会散发出行'col空向量的向量。您需要将其调整大小以使其大小为行,然后您的i循环可以说td [i]。在内部累积(col)以使其二维。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 我在c++代码中生成了一个运行时#3异常
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 建议在运行时将带有类实例的列表从c++导入qml
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 在运行时 c++ 更改用类对象填充的数组的大小
- 在运行时开始时填充两个大向量
- 在运行时填充多维矢量
- 如何在运行时填充Boost :: Fusion ::向量
- 在编译时用模板填充运行时数据
- 有没有更好的方法可以通过模板用预先计算的值填充数组(用于运行时)