初始化二维 std::vector

新手上路,请多包涵

所以,我有以下内容:

 std::vector< std::vector <int> > fog;

我很天真地初始化它,比如:

     for(int i=0; i<A_NUMBER; i++)
    {
            std::vector <int> fogRow;
            for(int j=0; j<OTHER_NUMBER; j++)
            {
                 fogRow.push_back( 0 );
            }
            fog.push_back(fogRow);
    }

而且感觉很不对劲……有没有另一种方法来初始化这样的向量?

原文由 Ferenc Deak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

使用接受初始大小和默认值的 std::vector::vector(count, value) 构造函数:

 std::vector<std::vector<int> > fog(
    ROW_COUNT,
    std::vector<int>(COLUMN_COUNT)); // Defaults to zero initial value

如果一个非零值,例如 4 ,则需要作为默认值:

 std::vector<std::vector<int> > fog(
    ROW_COUNT,
    std::vector<int>(COLUMN_COUNT, 4));

我还应该提到在 C++11 中引入了统一初始化,它允许使用 {} 初始化 vector 和其他容器:

 std::vector<std::vector<int> > fog { { 1, 1, 1 },
                                    { 2, 2, 2 } };


原文由 hmjd 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于只想将第一个 col 值初始化为与其余默认值(例如 1)不同的值(例如 2)的人。

 int rows = 3, cols = 4;
std::vector<std::vector<int>> matrix(rows, std::vector<int>(cols, 1));
for (int r = 0 ; r < rows ; r++) matrix[r][0] = 2;

 2 1 1 1
2 1 1 1
2 1 1 1

原文由 SridharKritha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题