gpt4 book ai didi

c++11 - 如何在构造 std::vector 时放置元素?

转载 作者:行者123 更新时间:2023-12-01 08:49:20 25 4
gpt4 key购买 nike

我想用一些元素构造一个 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.

最佳答案

您的 Item 类不支持复制或移动。这将阻止编译 std::vector 上的大多数操作,包括 std::vector::reservestd::vector::resize 。如果你真的有这样一个类,你可能想要一个 std::vector<std::aligned_storage_t<sizeof(Item), alignof(Item)>> 来代替。

如果您可以向 Item 添加移动构造函数,则可以改为创建辅助函数(因为您使用的构造函数重载是根据复制定义的)。请注意,以下版本仅适用于一元构造函数。

template <typename T, typename Arg>
auto make_vector(std::size_t n, Arg&& arg)
{
std::vector<T> result;
result.reserve(n);

for(std::size_t i = 0; i < n; ++i)
result.emplace_back(arg);

return result;
}

用法:
auto vec = make_vector<Item>(10, 3.14);

关于c++11 - 如何在构造 std::vector 时放置元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46686258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com