执行实例化类
Matrice
的程序并在其构造函数中创建它时,我遇到了Segmentation fault (core dumped)
错误。
这是我的简单代码:
#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
class Matrice{
public:
std::vector<std::vector<int> > mat;
Matrice(){
for(int i=0; i < 3; ++i) {
for(int j=0; j < 2; ++j) {
mat[i][j] = rand()%(10-0)+0;
}
}
}
};
int main(){
Matrice mat1;
return 0;
}
有人能启发我吗?
Matrice(){
for(int i=0; i < 3; ++i) {
mat.push_back(std::vector<int>());
for(int j=0; j < 2; ++j) {
mat[i].push_back(rand()%(10-0)+0);
}
}
}
编辑:
说明:矢量需要push_back
函数调用在矢量的末尾添加一个元素,如果超出了最初为矢量分配的大小,则会自动为矢量重新分配空间。由于它是一个向量的向量,您首先需要推回一个任意向量,然后在mat[i]中存储的每个任意向量处,我们push_back
所需的随机整数值。
在访问元素之前,您需要调整矩阵的大小:
mat.resize(3);
for( int i=0; i < 3; ++i)
{
mat[i].resize(2);
}
您使用std::vector
不正确。请参阅https://en.cppreference.com/w/cpp/container/vector/operator_at
[]
运算符返回对现有值的引用。与std::map
不同,它不插入新值。使用std::vector::push_back()
向矢量添加元素。