首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用向量的二维数组

使用向量的二维数组
EN

Stack Overflow用户
提问于 2009-12-02 22:11:29
回答 7查看 81.6K关注 0票数 24

我想用向量来创建2D数组。但是,当我这样做的时候,我得到了seg错误。谁能解释一下我做错了什么,以及这个问题的可能解决方案。

我公开了所有的东西,因为我现在不想和getter和setter打交道。我想弄清楚二维数组的概念。

代码语言:javascript
复制
#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;
}
EN

回答 7

Stack Overflow用户

发布于 2009-12-02 22:14:40

你的向量是空的。所以你不能使用[0][0]

下面是如何声明它的:

代码语言:javascript
复制
a.push_back(vector<point>());
a[0].push_back(p);

如果您从一开始就知道您将拥有多少项,则可以执行以下操作:

代码语言:javascript
复制
vector<vector<point> > a(10, vector<point>(10));

它是一个包含10个向量的向量,其中包含10个点。然后你就可以使用

代码语言:javascript
复制
a[4][4] = p;

然而,我认为使用向量的向量是令人困惑的。如果需要数组,请考虑使用uBLAS http://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/index.htm

代码语言:javascript
复制
#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;
}
票数 51
EN

Stack Overflow用户

发布于 2009-12-02 22:18:36

这是另一个建议。您要完成的任务以前已经完成,可以在Boost Multi-Array中找到。

票数 12
EN

Stack Overflow用户

发布于 2009-12-02 22:17:29

您已经构造了一个空的向量向量,并尝试在不向其添加任何元素的情况下取消引用第一个元素。

向量不像(某些)关联数组那样工作,在关联数组中,试图访问缺失的值会将其添加到集合中。您需要确保矢量具有适当数量的条目,然后才能尝试使用适当形式的矢量构造函数或使用push_back来访问它们。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1833127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档