使用构造函数更改矢量类型
Change vector type using constructors?
我有一个充满整数的向量。我有一个将整数作为构造函数的类。我想创建一个充满此类的新向量,使用第一个向量中的值作为每个向量的构造函数。
我有一种感觉,我目前的方法可以大大优化。
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));
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 构造函数正在调用一个使用当前类类型的函数
- 如何修复函数样式强制转换或类型构造的预期"("?
- 具有默认模板类型的默认构造函数的类型推导
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 在 c++ 中的模板实例化中使用带有构造函数的类作为类型参数
- 不命名构造函数和析构函数上的类型错误
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 初始化自定义类型构造函数的数组
- OpenGL着色器错误C1068:类型构造函数中的数据过多
- Lambda 闭包类型构造函数
- 仅当基础类型具有模板类型构造函数时,才实现这些构造函数
- 模板类的构造函数在使用 new 关键字时调用类型构造函数
- 如何强制函数参数为相同类型,并且不允许使用类型构造函数与给定类型匹配
- 模板类型构造函数参数
- 它们是c++中的类型构造函数
- 解析C++类型构造函数