像许多人一样,我一直在尝试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()?
简而言之,这样做的准则是什么?
我有std::vector<std::string> v;(初始化).如何使用range-for循环访问除第一个元素之外的所有元素(在索引0上).对于所有元素:
for (const string & s: v)
process(s);
Run Code Online (Sandbox Code Playgroud)
代替的v一范围的表达可以使用.如何编写范围表达式以跳过第一个元素(或跳过前n个元素)?
我知道如何使用v.begin() + 1和使用经典循环来获得效果.我正在寻找新的,更具可读性的推荐替代方案.可能类似于Python切片的东西?...喜欢:
for s in v[1:]:
process(s)
Run Code Online (Sandbox Code Playgroud)