我有这门课:
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/