c++ - 在成员函数返回的 vector 上调用开始和结束

标签 c++ c++11 vector iterator

我有这门课:

class foo{
public:
    const std::vector<int> get_v() const{
         return v_;
    }
private:
    std::vector<int> v_
};

我可以这样使用吗?

int main(){
    foo f;
    some_non_inplace_std_function(f.get_v().cbegin(),f.get_v().cend());
}

第一个 f.get_v() 会指向第二个 f.get_v() 的同一个 vector 吗?

最佳答案

get_v() 按值返回,因此每次调用它时都会得到原始文件的新拷贝。这意味着从对 get_v() 的不同调用中获得的开始和结束迭代器不属于同一序列。

如果你真的打算按值返回,那么你需要复制结果才能使用迭代器对:

auto v = f.get_v();
some_non_inplace_std_function(v.cbegin(), v.cend());

否则,您可以通过引用返回,或者直接从 foo 返回迭代器或迭代器范围对象。

const std::vector<int>& get_v() const{ ... }

struct foo{
    std::vector<int>::const_iterator begin() const{ return v_.begin(); }
    std::vector<int>::const_iterator end() const{ return v_.end(); }
 ....
private:
    std::vector<int> v_
};

关于c++ - 在成员函数返回的 vector 上调用开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42153847/

相关文章:

C++ 从父类(super class)调用子类方法

c++ - 尝试将 lua 头文件导入 C++ 项目时出现链接器错误?

c++ - 我如何完全删除数组并将其替换为 vector ?

c++ - 带有 cin 的 LCV 的循环不会在 C++ 中退出

c++ - 运算符重载 (+)、(++)、([])、(=) 和 (*)

c++ - std::unique_ptr 和异常安全

c++ - std::hash 是否保证在 stdlib 发行版中相同

c++ - std::list<std::future> 析构函数不阻塞

python - 以与轴的纵横比一致的物理单位重新缩放箭矢箭头

c++ - C++中如何枚举元素?