相关疑难解决方法(0)

如何使我的自定义类型与"基于范围的for循环"一起使用?

像许多人一样,我一直在尝试C + 11带来的不同功能.我最喜欢的一个是"基于范围的循环".

我明白那个:

for(Type& v : a) { ... }
Run Code Online (Sandbox Code Playgroud)

相当于:

for(auto iv = begin(a); iv != end(a); ++iv)
{
  Type& v = *iv;
  ...
}
Run Code Online (Sandbox Code Playgroud)

而这begin()只是返回a.begin()标准容器.

但是,如果我想让我的自定义类型"基于范围的循环" - 意识到什么?

如果我只是专注begin()end()

如果我的自定义类型属于命名空间xml,我应该定义xml::begin()还是std::begin()

简而言之,这样做的准则是什么?

c++ customization for-loop c++11

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

减少一个结束迭代器

我今天正在阅读有关支持双向迭代的容器的方法,这段代码是有效的:

Collection c(10, 10);
auto last = --c.end();
*last;
Run Code Online (Sandbox Code Playgroud)

这让我想到,当提交一对双向迭代器[求,结束]到STL中的算法时,是否需要定义?end?如果是这样,结果是否可以解除引用?

void algo(T beg, T end){
    //...
    auto iter = --end;
    //...
    *iter;
} 
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

6
推荐指数
2
解决办法
5615
查看次数

标签 统计

c++ ×2

c++11 ×1

customization ×1

for-loop ×1

iterator ×1

stl ×1