相关疑难解决方法(0)

cbegin/cend背后的原因是什么?

我想知道为什么cbegincend在C++ 11中引入?

什么情况下使用这些方法时,使得从常量重载的差异beginend

c++ iterator const-correctness const-iterator c++11

182
推荐指数
5
解决办法
5万
查看次数

强制在基于范围的内容中使用cbegin()/ cend()

这个问题涉及:

我什么时候应该使用新的ranged-for,我可以将它与新的cbegin/cend结合使用吗?

基于这个问题,强制使用cbegin()cend()需要做的,例如:

for (auto& v: const_cast<decltype(container) const>(container))
Run Code Online (Sandbox Code Playgroud)

这是一个应该消除它的构造的很多样板代码.有更紧凑的方法吗?我的问题的原因是,隐式共享容器可能会将我的使用begin()作为分离自己的线索.

c++

31
推荐指数
3
解决办法
4338
查看次数

我什么时候应该使用新的ranged-for,我可以将它与新的cbegin/cend结合使用吗?

当然,C++ 11中新的ranged-for将非常简洁和有用.据我了解它是如何工作的,它会查找"容器" beginend尝试*Argument-dependent-Lookup"(ADT).

但另一个补充是,所有容器现在都拥有cbegin()cend()获得const_iterators容器.

我有点困惑,一方面是我想我应该用cbegin()我如果不是,要修改的容器,另一方面我必须添加额外的const内部范围,为获得同样的事情.

所以,它看起来像这样:

// print all
for(const auto elem : data)
  cout << elem
Run Code Online (Sandbox Code Playgroud)

使用ADT,找到data.begin(),因此const需要.

VS

// print everything but the first (a reason not to use range-for)
for(auto it = data.cbegin()+1; it!=data.cend(); ++it)
  cout << *it
Run Code Online (Sandbox Code Playgroud)

使用data.cbegin(),因此const不需要.

但这不是更"惯用"吗?:

// print everything but the first (a reason not to use range-for) …
Run Code Online (Sandbox Code Playgroud)

c++ foreach for-loop idioms c++11

14
推荐指数
1
解决办法
3316
查看次数

暴露自定义STL样式迭代的首选方法是什么?

(另请参阅是否有一种很好的方法可以在C++中为自定义类型手写所有12个所需的Container函数?)


对于像这样的课程

namespace JDanielSmith {
class C
{
    const size_t _size;
    const std::unique_ptr<int[]> _data;

public:
    C(size_t size) : _size(size), _data(new int[size]) {}

    inline const int* get() const noexcept { return _data.get(); }
    inline int* get() noexcept { return _data.get(); }

    size_t size() const noexcept { return _size; }
};
}
Run Code Online (Sandbox Code Playgroud)

暴露迭代的首选方式是什么?我应该写begin()/ end()(和cbegin()/ cend())成员函数吗?

const int* cbegin() const {
    return get();
}
const int* cend() const {
    return cbegin() + size();
}
Run Code Online (Sandbox Code Playgroud)

或者这些应该是非会员职能? …

c++ iterator stl

8
推荐指数
2
解决办法
687
查看次数