【发布时间】:2018-03-23 00:18:44
【问题描述】:
我想构造一个std::vector,其中的一些元素具有由某些特定构造函数而不是默认构造函数构造的这些元素。换句话说,我想在构建向量时放置元素。我该怎么做?
考虑this:
struct Item
{
Item(double) {}
Item(const Item&) = delete;
Item(Item&&) = delete;
};
std::vector<Item> vv(10, 3.14); // Fails! Tries to copy while I want to emplace.
【问题讨论】:
-
也许向量对你来说是错误的容器,也许你应该改用
std::array?或者您可以详细说明您遇到的实际 问题? 为什么您想出了需要帮助的解决方案?这是一个非常典型的XY problem 类型的问题。 -
@Someprogrammerdude 实际上,不是
std::vector也不是std::array,而是内置的动态数组是最适合目的的数据结构(动态但固定大小,没有修改)。但是内置的动态数组不支持这个 emplace-while-constructing 功能。 -
好吧,考虑到标准 C++ 中不存在“动态数组”(我假设您的意思是 variable-length arrays?),这也不是一个选择。或者你的意思是
new[]?也许您的原始问题可以通过其他方式解决? -
@Someprogrammerdude 我的意思是
new[]。 原始问题是有一组预定义的(但在运行时知道,而不是编译时知道)数量的std::threads,这些std::threads 使用相同的lambda 进行初始化。因此禁止复制,最好避免移动(理想情况下我不应该移动)。
标签: c++11 vector constructor emplace