使用传染媒介的二维数组

Cur*_*ous 22 c++ stl

我想用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)

  • 如果您有答案,请将其标记为.否则说明你需要的额外信息;) (8认同)

whe*_*ies 12

这是另一个建议.您之前已经完成的工作已经完成,可以在Boost Multi-Array中找到.


小智 7

你构造了一个空的向量向量,并尝试取消引用第一个元素而不向其添加任何元素.

向量不像(某些)关联数组那样工作,尝试访问缺少的值会将其添加到集合中.在尝试使用适当形式的向量构造函数或使用push_back访问它们之前,需要确保向量具有适当数量的条目.