首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于范围的boost::adaptor::indexed循环

基于范围的boost::adaptor::indexed循环
EN

Stack Overflow用户
提问于 2013-05-17 18:53:33
回答 3查看 2.5K关注 0票数 6

基于C++11范围的循环反推迭代器.这是否意味着与boost::adaptors::indexed一起使用它是没有意义的?示例:

代码语言:javascript
复制
boost::counting_range numbers(10,20);
for(auto i : numbers | indexed(0)) {
  cout << "number = " i 
  /* << " | index = " << i.index() */ // i is an integer!
  << "\n";
}

我总是可以使用计数器,但我喜欢索引迭代器。

  • 它有可能以某种方式与基于范围的for循环一起使用吗?
  • 使用带索引的基于范围的循环的成语是什么?(只是一个普通的柜台?)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-21 15:23:51

在Boost 1.56 (2014年8月发布)中对此进行了修正;元素被间接地指向带有index()value()成员函数的index()之后。

示例:http://coliru.stacked-crooked.com/a/e95bdff0a9d371ea

代码语言:javascript
复制
auto numbers = boost::counting_range(10, 20);
for (auto i : numbers | boost::adaptors::indexed())
    std::cout << "number = " << i.value()
        << " | index = " << i.index() << "\n";
票数 4
EN

Stack Overflow用户

发布于 2022-06-03 14:15:10

在迭代集合时,您可能需要索引位置(如果没有其他的话,则打印项目号),这似乎更有用:

代码语言:javascript
复制
  #include <boost/range/adaptors.hpp>

  std::vector<std::string> list = {"boost", "adaptors", "are", "great"};
  for (auto v: list | boost::adaptors::indexed(0)) {
    printf("%ld: %s\n", v.index(), v.value().c_str());
  }

指纹:

代码语言:javascript
复制
0: boost
1: adaptors
2: are
3: great

任何简单地迭代整数范围的创新都会受到经典的for循环的强烈挑战,这仍然是非常强大的竞争对手:

代码语言:javascript
复制
for (int a = 10; a < 20; a++) 

虽然这可以在许多方面被扭曲,但提出一些明显更易读的东西并不容易。

票数 0
EN

Stack Overflow用户

发布于 2014-08-25 18:56:27

简短的回答(正如评论中所提到的那样)是“正确的,这是没有意义的。”我也觉得这很烦人。根据您的编程风格,您可能喜欢我编写的"zipfor“包(只是标题):来自github

它允许语法类似于

代码语言:javascript
复制
std::vector v;
zipfor(x,i eachin v, icounter) {
   // use x as deferenced element of x
   // and i as index
}

不幸的是,我无法找到一种使用基于范围的语法的方法,不得不求助于"zipfor“宏:

标题最初是为如下的事情而设计的

代码语言:javascript
复制
std::vector v,w;
zipfor(x,y eachin v,w) {
   // x is element of v
   // y is element of w (both iterated in parallel)
}

代码语言:javascript
复制
std::map m;
mapfor(k,v eachin m)
   // k is key and v is value of pair in m

我对g++4.8进行的全面优化测试表明,生成的代码并不比手工编写代码慢。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16616042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档