首页 > 解决方案 > 使用构造函数更改向量类型?

问题描述

我有一个充满整数的向量。我有一个将整数作为构造函数的类。我想创建一个充满此类的新向量,使用第一个向量中的值作为每个向量的构造函数。

我觉得我目前的方法可以大大优化。

vector<int> integers = /*something...*/;

vector<clazz> clazzes();
for(auto& n : integers)
{
    clazzes.emplace_back(clazz(n));
}

标签: c++optimizationvector

解决方案


一个std::vector接受范围并允许用户定义转换的构造函数。这就是你需要的:

template< class InputIt >
vector( InputIt first, InputIt last, 
    const Allocator& alloc = Allocator() );

完整程序:

#include <vector>
#include <iostream>

struct Wrapper
{
    int value;
    Wrapper(int n) : value(n) {}
};

int main()
{
    std::vector<int> integers = {0, 1};
    std::vector<Wrapper> wrapped{begin(integers), end(integers)};
    std::cout << wrapped[1].value << '\n';
}

现场演示

这并不是特别优化,但它减少了代码,因此更少的错误和更少的 wtf/line。哪个好(TM)。


推荐阅读