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

标签 c++

假设我有一个 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/

相关文章:

c++ - cmake CMakeLists.txt 文件中的 CXX 中的 "XX"是什么

c++ - 是否有任何网站或软件可以分析C++代码?

c++ - Firebreath 事件确认

c++ - Qt 中的窗口模板(或者基本上是面向对象的 Windows)

C++ 创建多个构造函数

c++ - 在 C++ 中将序列化的 Thrift 结构序列化到 Kafka

C++ 对象的映射顺序

C++11 直接列表初始化语法

c++ - 定义基类的静态变量

c++ - 使用模板返回一个通用的 C 风格数组