2012年(158)
分类: C/C++
2012-11-23 15:15:12
调用者应当考虑函数对 const& 参数的影响
个人觉得这虽然是个小问题,但违反了const的直觉,有资格进入《Effective
C++》的条款之中
^_^
虽然这个问题和list的遍历删除元素问题类似,但这个问题不仅仅在于算法编写者和调用者常常并非同一人,更在于这个问题导致两者的耦合度的增加,而且大多数情况下无法避免这个耦合
#include
#include
#include
#include
using namespace std;
int main( void )
{
int temp[] = { 1,3,2,4,2,3,3,9 };
vector
vector
//vector
//test.erase(
remove(test.begin(),test.end(),v), test.end()
);
test.erase( remove(test.begin(),test.end(),*itor), test.end() ); // 本意是想删除test容器中所有的3
copy( test.begin(), test.end(),
ostream_iterator
}
究其原因,是因为remove算法过程中*itor受到了改变(这和const&的含义发生了直觉上的违背),所以 remove(…,*itor) 和
remove(…,3) 产生了不一致的效果