如何在 C++ 中声明和初始化 2d int 向量?

Posted

技术标签:

【中文标题】如何在 C++ 中声明和初始化 2d int 向量?【英文标题】:How do I declare and initialize a 2d int vector in C++? 【发布时间】:2010-04-28 23:30:51 【问题描述】:

我正在尝试做类似的事情:

#include <iostream>
#include <vector>
#include <ctime>

class Clickomania

    public:
        Clickomania();
        std::vector<std::vector<int> > board;
;

Clickomania::Clickomania()
    : board(12, std::vector<int>(8,0))             <<<<<<<


    srand((unsigned)time(0));

    for(int i = 0; i < 12; i++)
    
        for(int j = 0; j < 8; j++)
        
            int color = (rand() % 6) + 1;
            board[i][j] = color;
        
    

但是,显然我不能以这种方式初始化向量的“板”向量。

如何创建 2d 矢量类型的公共成员并正确初始化它?

【问题讨论】:

为什么不能这样初始化呢? (除了您可能应该在其他地方调用srand,而不是每次创建板时)。 它在 Visual Studio 2005 中编译得很好。究竟是什么编译器错误? 编译并且看起来不错。不过,您应该在其他地方调用srand 并提供参数而不是“幻数”`12、8、0、6 等... 我正在使用 VS2010 并尝试使用上面的代码创建一个二维向量。我在“board[i][j] = color;”中的“[j]”下得到一个编译器错误- “表达式必须具有指向对象的类型”。如果这个问题不是那么密切相关,我几乎会自己提出一个问题。 @Inquisitor 你把board定义为什么? 【参考方案1】:

您应该使用允许您为两个向量指定大小和初始值的构造函数,这可能会使其更容易一些。

类似:

vector<vector<int>> v2DVector(3, vector<int>(2,0));

应该可以。

【讨论】:

这正是 OP 所做的。 是的,刚刚注意到..不知道我是怎么错过的。【参考方案2】:

改用矩阵:

(来自 boost 文档的基本示例)

#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;

【讨论】:

也许是因为它与让向量在上面的代码中像所问的问题一样工作无关。我不知道。我认为反对它有点苛刻 - 毕竟这个答案可能有帮助的 - 但它在技术上并没有回答这个问题。 +1,我认为没有必要对有用的答案投反对票,即使它没有完全回答 OP 的问题。【参考方案3】:

用 g++ 编译你的代码,我得到的错误是 srand()rand() 都没有被声明。我必须添加#include &lt;cstdlib&gt; 才能编译代码。但是一旦我这样做了,它就工作得很好。所以,我想说除了添加包含语句之外,你的代码很好。您正在正确初始化向量。

也许您拥有的代码与您发布的代码不太匹配?我假设如果您的实际代码不包含 cstdlib,那么您很快就会明白这是问题所在,而不是向量的问题。因此,如果您的代码与您发布的内容不完全匹配,也许这就是问题所在。如果没有,您使用的是什么编译器?

【讨论】:

以上是关于如何在 C++ 中声明和初始化 2d int 向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何初始化 2D 向量 C++ [重复]

如何在 C++ 中将输入正确读入 2D 向量 vector<vector<int>>

带有空指针的 2D 指针数组 c++

如何在 C++ 中合法地声明向量变量?

用户将元素输入到二维向量c++中

如何在 C++ 中初始化向量 [重复]