【问题标题】:In-class initialization of vector with size [duplicate]具有大小的向量的类内初始化[重复]
【发布时间】:2021-12-30 09:06:22
【问题描述】:
struct Uct
{
    std::vector<int> vec{10};
};

上面的代码创建了一个包含值为 10 的单个元素的向量。但我需要初始化大小为 10 的向量。就像这样:

std::vector<int> vec(10);

如何使用类内初始化来做到这一点?

【问题讨论】:

  • std::vector&lt;int&gt; vec = std::vector&lt;int&gt;(10);
  • @Evg,这会调用不必要的移动构造函数吗?
  • 从 C++17 开始,它不是由于强制复制/移动省略。
  • 可以使用Uct构造函数来定义vector的大小。

标签: c++ in-class-initialization braced-init-list


【解决方案1】:

我认为有两个答案:

std::vector<int> vec = std::vector<int>(10);

如 cmets 中所说:

std::vector<int> vec{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

这不太可取,因为它的可读性较低且以后更难调整,但我认为它更快(在 c++17 之前),因为它不会像 cmets 中所说的那样调用移动构造函数。

话虽如此,Uct(): vec(10){}; 也是具有相同属性的完全可行的选择(我认为)。

【讨论】:

    【解决方案2】:

    可以直接使用

    std::vector vec(10,0) 得到一个所有元素都等于 0 的 10 元素向量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2012-11-17
      • 2016-01-29
      • 1970-01-01
      • 2019-01-24
      相关资源
      最近更新 更多