gpt4 book ai didi

c++ - 在 C++ 中迭代方法的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 15:05:44 25 4
gpt4 key购买 nike

假设我有一个 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-) 引用,但是为你的类适当重载 beginend 比暴露更干净 vector 。

关于c++ - 在 C++ 中迭代方法的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com