我有一个指向对象的指针向量,并且在某个时候,使用该向量的子元素创建第二个向量。现在,对原始向量进行排序会更改第二个向量中的元素(排序后其中的元素完全不同)。
这是预期的行为吗?它与make_indirect_iterator有关吗?有没有更好的解决方案(假设我想保留一个指针向量)?
std::vector<std::shared_ptr<MyObj>> vecAll;
std::vector<std::shared_ptr<MyObj>> vecSub;
// fill vecAll with something...
for(auto obj : vecAll) {
if( obj->x >=0 ) {
vecSub.push_back(obj);
}
}
// 3 objects in 'vecSub'
std::sort(boost::make_indirect_iterator(vecAll.begin()), boost::make_indirect_iterator(vecAll.end()), std::greater<MyObj>());
// now there are 3 DIFFERENT objects in 'vecSub'