在我给二维向量赋予第一个值后控制台关闭
Posted
技术标签:
【中文标题】在我给二维向量赋予第一个值后控制台关闭【英文标题】:Console closing after i give a first value to my bidimensional vector 【发布时间】:2019-09-23 21:58:43 【问题描述】:我创建了二维向量函数,它应该填充一个向量返回到我的主函数,但是在我尝试插入第一个值之后,控制台停止获取新值并结束。
#include <iostream>
#include <vector>
std::vector <std::vector <int>> fill(int lin, int col)
int val;
std::vector <std::vector<int>> mat;
for (int i = 0; i < lin; i++)
for (int j = 0; j < col; j++)
std::cin >> val;
mat[i][j] = val;
return mat;
void size(int &lin, int &col)
std::cout << "Quantidade de linhas: ";
std::cin >> lin;
std::cout << "Quantidade de colunas: ";
std::cin >> col;
int main()
int opc, lin, col;
std::vector <std::vector<int>> matA;
std::vector <std::vector<int>> matB;
std::cout << "1. Soma\n2. Subtracao\n3. Multiplicacao\n4. Divisao\n >";
std::cin >> opc;
switch (opc)
case 1:
//soma
size(lin, col);
matA = fill(lin, col);
matB = fill(lin, col);
【问题讨论】:
mat[i][j] = val;
这和你想的不一样
我相信你需要根据lin
和col
来resize
你的向量。在其当前状态下,向量大小为(0,0)
。
使用at()
而不是operator[]
进行元素访问,这很明显。
为什么使用vector
of vector
s,而不是boost::matrix
?
【参考方案1】:
您需要调整向量的大小(实际上您需要调整外部和每个内部向量的大小)。查看第 3 行和第 6 行的变化:
std::vector <std::vector <int>> fill(int lin, int col)
int val;
std::vector <std::vector<int>> mat(lin);
for (int i = 0; i < lin; i++)
mat[i].resize(col);
for (int j = 0; j < col; j++)
std::cin >> val;
mat[i][j] = val;
return mat;
【讨论】:
效果很好。澄清一下:我需要在 mat(lin) 中声明初始向量大小,创建行,并在 mat[i].resize(col) 中为每一行创建列。 @LcsxXmat(lin)
允许您在构造函数中分配lin
元素。以上是关于在我给二维向量赋予第一个值后控制台关闭的主要内容,如果未能解决你的问题,请参考以下文章