【发布时间】:2014-02-21 19:22:22
【问题描述】:
我的问题很简单,看例子:
std::array<int,6> a = {{0,1,2,3,4,5}}; // -- given container.
auto F = []( int i ) { return i*i; }; // -- given function.
std::vector<int> v; // need create
// my solution:
v.reserve( a.size () );
for( std::size_t i = 0; i < a.size(); ++i )
v.push_back( F(a[i]) );
// but I need something like
std::vector<int>v( a.begin(), a.end(), <|applying each element to F|> );
我可以创建类似上面的容器,而不是显式调用 Reserve 和任何重新分配吗?
编辑:
- 我想避免保留;因为在其他情况下我的第一个解决方案很好 对我来说:)
- 我想避免任何调整大小;因为它每个都被初始化 元素默认为ctor。
- 我将在实际项目中使用它,其中可能包含许多 3 方库(boost、Soft-STL、...)。
【问题讨论】:
-
std::transform不会这样做吗? -
transform iterators可能在这里有用。 -
我也想避免使用 v.reserve(a.size())。
标签: c++ c++11 iterator containers stl-algorithm