Hum*_*awi 0 c++ iterator vector c++11
我有这门课:
class foo{
public:
const std::vector<int> get_v() const{
return v_;
}
private:
std::vector<int> v_
};
Run Code Online (Sandbox Code Playgroud)
我能这样用吗?
int main(){
foo f;
some_non_inplace_std_function(f.get_v().cbegin(),f.get_v().cend());
}
Run Code Online (Sandbox Code Playgroud)
第一个f.get_v()指向第二个相同的向量f.get_v()吗?
get_v()按值返回,因此每次调用它时都会获得原始副本.这意味着从不同调用获得的开始和结束迭代器get_v()不属于同一序列.
如果你真的打算按值返回,那么你需要复制结果才能使用迭代器对:
auto v = f.get_v();
some_non_inplace_std_function(v.cbegin(), v.cend());
Run Code Online (Sandbox Code Playgroud)
否则,您可以通过引用返回,或直接从中返回迭代器或迭代器范围对象foo.
const std::vector<int>& get_v() const{ ... }
Run Code Online (Sandbox Code Playgroud)
要么
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_
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |