Effective STL :算法1
确保目标空间足够大
使用者总以为STL会自动扩充空间以容纳对象,即也认为STL总能够自己管理它的存储空间。 这种想法是错误的。
int transmogrify(int x); vector values; ...... vector results; transform(values.begin(), values.end(), result.end(),transogrify);
上述例子作用:将values的每个元素调用transogrify,并将结果写到从result.end() 开始的目标区域中。 问题是*result.end()中并没有对象,*(result.end()+1)就更没对象了。 正确的调用方法:
result.reserve(results.size() + values.size());//避免内存分配
transform(values.begin(), values.end(),
back_inserter(result),transogrify);
back_inserter 内部调用的是push_back,所以back_inserter适用于提供了push_back的容器,即vector string deque list。
如果需要在头部插入,如下:
transform(values.rbegin(), values.rend(),
front_inserter(result),transogrify);
同理:front_inserter调用的是push_front.vector没有,另外三个可以。
中间插入呢;
transform(values.rbegin(), values.rend(),
inserter(result, result.begin()+result.size()/2),transogrify);

浙公网安备 33010602011771号