我想用向量来创建2D数组。但是,当我这样做的时候,我得到了seg错误。谁能解释一下我做错了什么,以及这个问题的可能解决方案。
我公开了所有的东西,因为我现在不想和getter和setter打交道。我想弄清楚二维数组的概念。
#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;
}
发布于 2009-12-02 22:14:40
你的向量是空的。所以你不能使用[0][0]
。
下面是如何声明它的:
a.push_back(vector<point>());
a[0].push_back(p);
如果您从一开始就知道您将拥有多少项,则可以执行以下操作:
vector<vector<point> > a(10, vector<point>(10));
它是一个包含10个向量的向量,其中包含10个点。然后你就可以使用
a[4][4] = p;
然而,我认为使用向量的向量是令人困惑的。如果需要数组,请考虑使用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;
}
发布于 2009-12-02 22:18:36
这是另一个建议。您要完成的任务以前已经完成,可以在Boost Multi-Array中找到。
发布于 2009-12-02 22:17:29
您已经构造了一个空的向量向量,并尝试在不向其添加任何元素的情况下取消引用第一个元素。
向量不像(某些)关联数组那样工作,在关联数组中,试图访问缺失的值会将其添加到集合中。您需要确保矢量具有适当数量的条目,然后才能尝试使用适当形式的矢量构造函数或使用push_back来访问它们。
https://stackoverflow.com/questions/1833127
复制相似问题