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);
posted @ 2021-11-21 08:47  Kiris  阅读(48)  评论(0)    收藏  举报