我想用vector创建2D数组.但是,当我这样做时,我得到了段故障.任何人都可以解释我做错了什么,以及解决这个问题的可能方法.
我把一切都公之于众,因为我现在不想与吸气剂和制定者打交道.我想清楚地了解2D数组的概念.
#include <iostream>
#include <vector>
using namespace std;
class point
{
public:
point():x(0),y(0){}
~point(){}
point(float xx,float yy):x(xx),y(yy){}
float x,y;
};
int main()
{
vector<vector<point> > a; // 2D array
point p(2,3);
a[0][0] = p; // error here
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Tri*_*ner 48
你的矢量是空的.所以你不能使用[0][0].
以下是您如何声明:
a.push_back(vector<point>());
a[0].push_back(p);
Run Code Online (Sandbox Code Playgroud)
如果您知道从一开始就有多少物品,您可以:
vector<vector<point> > a(10, vector<point>(10));
Run Code Online (Sandbox Code Playgroud)
它是一个包含10个包含10个点的向量的向量.然后你可以使用
a[4][4] = p;
Run Code Online (Sandbox Code Playgroud)
但是,我认为使用矢量矢量令人困惑.如果你想要一个数组,可以考虑使用uBLAS http://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/index.htm
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
using namespace boost::numeric::ublas;
matrix<double> m (3, 3);
for (unsigned i = 0; i < m.size1 (); ++ i)
for (unsigned j = 0; j < m.size2 (); ++ j)
m (i, j) = 3 * i + j;
std::cout << m << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
你构造了一个空的向量向量,并尝试取消引用第一个元素而不向其添加任何元素.
向量不像(某些)关联数组那样工作,尝试访问缺少的值会将其添加到集合中.在尝试使用适当形式的向量构造函数或使用push_back访问它们之前,需要确保向量具有适当数量的条目.