【问题标题】:How do I declare and initialize a 2d int vector in C++?如何在 C++ 中声明和初始化 2d int 向量?
【发布时间】: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定义为什么?

标签: c++


【解决方案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,那么您很快就会明白这是问题所在,而不是向量的问题。因此,如果您的代码与您发布的内容不完全匹配,也许这就是问题所在。如果没有,您使用的是什么编译器?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-11
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多