假设我有一个 Foo 类:
class Foo {
public:
std::vector<Bar> barVec() const {return barVec_;}
private:
std::vector<Bar> barVec_;
};
其中 Bar 是其他类。所以在 Foo 之外,对 barVec_ 的唯一访问是通过方法 barVec()。
如果 myFoo 是 Foo 的实例,而 pred 是 Bar 上的一元谓词,可以这样做吗:
auto i = find_if(myFoo.barVec().begin(), myFoo.barVec().end(), pred);
if (i != myFoo.barVec().end()) {
//do some stuff here
}
或者我是否必须将 myFoo.barVec() 分配给一个变量并迭代该变量?例如:
std::vector<Bar> tmp = myFoo.barVec();
auto i = find_if(tmp.begin(), tmp.end, pred);
if (i != tmp.end()) {
//do some stuff here
}
最佳答案
不,这不行,因为您在返回 vector 时创建了 vector 的拷贝,因此您正在比较的迭代器引用不同的容器,这是未定义的行为。
你可以只返回一个 (const
-) 引用,但是为你的类适当重载 begin
和 end
比暴露更干净 vector 。
关于c++ - 在 C++ 中迭代方法的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484808/