我有一个使用std::vector
模板参数的模板类。该参数可能不是默认可构造的。我想减小向量的大小(将其切成给定的大小)。明显地
vec.resize( reduced_size );
...不起作用,因为它需要默认构造函数。
我当然可以:
- 为任何使用的类型创建默认构造函数(当它可能不是一个好的设计选择时需要我添加它)
- 将默认值传递给函数(无用的界面混乱)
- 将构造方法传递给模板(也是无用的混乱)
在写这个问题时,我注意到我可以erase
从向量到最后的元素:
vec.erase ( vec.begin() + position, vec.end() );
...但是,我不确定这是否会像resize
.
有没有一种有效的方法可以在没有默认构造函数的情况下减小向量的大小?
C++11 解决方案是可以接受的。
编辑:似乎 MSVC 和 GCC 都将缩小大小调整为擦除调用,这样就回答了我的性能问题。