如何在一个表达式中创建一个初始化向量?

How can I create an initialize a vector in one expression?

我想在不声明新变量的情况下创建一个初始化容器(如向量或列表)?

std::vector<int> v;
v.push_back(1);
tbb::parallel_do(v, lambda);

相反,我想要这样的东西:

tbb::parallel_do({1}, lambda);

tbb::parallel_do是一个模板,第一个参数是一个裸模板参数。结合 {1} 不是表达式因此没有类型的事实,无法推断模板参数,因此这是不可能的。

但是,std::vector 有一个采用 std::initializer_list 的构造函数,这意味着您可以直接使用元素列表初始化向量。这反过来意味着你可以写:

tbb::parallel_do(std::vector{1}, lambda);

并且临时向量将包含您在原始示例中添加的唯一元素。大多数容器都支持这种初始化,所以对于大多数容器你应该没问题。如果出于某种原因您想要的那个没有,您可以创建一个辅助函数来为您完成。

您可以使用 std::vector's constructor 的以下重载。

explicit vector( size_type count, 
                 const T& value = T(),
                 const Allocator& alloc = Allocator());

下面是使用方法。

tbb::parallel_do(std::vector<int>(1, 1), lambda);