首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矢量初始化的C++11向量

矢量初始化的C++11向量
EN

Stack Overflow用户
提问于 2018-04-20 00:31:17
回答 1查看 1.3K关注 0票数 1

在C++11中,对于变量初始化,{}优于()。但是,我注意到{}不能正确地初始化向量。

给定以下代码,vector<vector<int>> mat2(rows, vector<int>(cols, 2))vector<vector<int>> mat4{rows, vector<int>(cols, 4)}按预期工作,但vector<vector<int>> mat1{rows, vector<int>{cols, 1}}vector<vector<int>> mat3(rows, vector<int>{cols, 3})不工作。有人能解释原因吗?

代码语言:javascript
复制
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

string parse_matrix(const vector<vector<int>>& mat)
{
    stringstream ss;
    for (const auto& row : mat) {
        for (const auto& num : row)
            ss << std::setw(3) << num;
        ss << endl;
    }
    return ss.str();
}

int main()
{
    const int rows = 5;
    const int cols = 4;
    vector<vector<int>> mat1{rows, vector<int>{cols, 1}};
    vector<vector<int>> mat2(rows, vector<int>(cols, 2));
    vector<vector<int>> mat3(rows, vector<int>{cols, 3});
    vector<vector<int>> mat4{rows, vector<int>(cols, 4)};

    cout << "mat1:\n" << parse_matrix(mat1);
    cout << "mat2:\n" << parse_matrix(mat2);
    cout << "mat3:\n" << parse_matrix(mat3);
    cout << "mat4:\n" << parse_matrix(mat4);
}

输出:

代码语言:javascript
复制
$ g++ -Wall -std=c++14 -o vector_test2 vector_test2.cc 
$ ./vector_test2
mat1:
  4  1
  4  1
  4  1
  4  1
  4  1
mat2:
  2  2  2  2
  2  2  2  2
  2  2  2  2
  2  2  2  2
  2  2  2  2
mat3:
  4  3
  4  3
  4  3
  4  3
  4  3
mat4:
  4  4  4  4
  4  4  4  4
  4  4  4  4
  4  4  4  4
  4  4  4  4
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-20 01:45:44

由于多种原因,std::vector<int> (更广泛地说,是算术类型的向量)的统一初始化被破坏了。统一初始化使用与列表初始化相同的语法(从initializer_list构造);当语法不明确时,构造函数优先使用initializer_list

因此,std::vector<int> v(42);的意思是“使用std::vector(size_t)构造函数创建42个零的向量”;而std::vector<int> v{42};的意思是“使用std::vector(std::initializer_list)构造函数创建一个具有值为42的单个元素的向量”。

类似地,std::vector<int> v(5, 10);使用两个参数构造函数来创建一个由5个元素组成的向量,所有这些元素的值都为10;而std::vector<int> v{5, 10};使用initializer_list-taking构造函数并创建一个由两个元素组成的向量,即值5和10。

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

https://stackoverflow.com/questions/49932144

复制
相关文章

相似问题

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