使用构造函数更改矢量类型

Change vector type using constructors?

本文关键字:类型 构造函数      更新时间:2023-10-16

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

有一种感觉,我目前的方法可以大大优化。

vector<int> integers = /*something...*/;
vector<clazz> clazzes();
for(auto& n : integers)
{
    clazzes.emplace_back(clazz(n));
}

有一个构造函数 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/行。哪个很好(TM)。

你所拥有的是合理的(尽管请参阅YSC的答案以获得更好的方法)。 一个简单的改进是保留所需的存储,以便emplace_back()永远不需要重新分配:

std::vector<clazz> clazzes;
clazzes.reserve(integers.size());  // <-- HERE
for(auto& n : integers)
{
    clazzes.emplace_back(clazz(n));
}