相关疑难解决方法(0)

STL或boost中的C++范围/ xrange等价物?

在STL或boost中是否有C++等效的python Xrange生成器?

xrange基本上生成递增的数字,每次调用++运算符.构造函数是这样的:

xrange(first, last, increment)
Run Code Online (Sandbox Code Playgroud)

我希望通过每个使用boost来做这样的事情:

foreach(int i, xrange(N))
Run Code Online (Sandbox Code Playgroud)

我知道for循环.在我看来,他们是太多的样板.

谢谢

我的理由:

我想要这样做的主要原因是因为我使用语音文本软件,并且编程循环通常很难,即使使用代码完成.具有可显示的构造更有效.

许多循环从零开始并递增1,这是范围的默认值.我发现python构造更直观

 for(int i = 0; i < N; ++i)
 foreach(int i, range(N))
Run Code Online (Sandbox Code Playgroud)

需要将范围作为参数的函数:

 Function(int start, int and, int inc);
 function(xrange r);
Run Code Online (Sandbox Code Playgroud)

我理解语言之间的差异,但是如果python中的特定构造对我非常有用并且可以在C++中高效实现,我没有理由不使用它.对于每个构造,C++都是外来的,但是人们使用它.

我将我的实现放在页面底部以及示例用法.

在我的域中我使用多维数组,通常排名4张量.所以我经常会得到4个具有不同范围/增量的嵌套循环来计算规范化,索引等等.这些不一定是性能循环,我更关心正确性可读性和修改能力.

例如

int function(int ifirst, int ilast, int jfirst, int jlast, ...);
versus
int function(range irange, range jrange, ...);
Run Code Online (Sandbox Code Playgroud)

在上面,如果需要不同的strid,你必须传递更多的变量,修改循环等,最终你会得到大量的整数/几乎相同的循环.

foreach和range完全解决了我的问题.对普通C++程序员的熟悉程度并不高我的关注列表 - 问题领域是一个相当模糊,有很多元编程,SSE内在,生成代码.

c++ boost iterator

37
推荐指数
2
解决办法
1万
查看次数

将boost :: optional与boost :: adapters :: indirected一起使用

我正在尝试编译以下代码:

#include <iostream>
#include <iterator>
#include <vector>

#include <boost/assign/std/vector.hpp>
#include <boost/optional.hpp>
#include <boost/range/adaptor/indirected.hpp>
#include <boost/range/algorithm/copy.hpp>

int main( int argc, char ** argv )
{
  using namespace boost::assign;
  using boost::adaptors::indirected;

  std::vector<boost::optional<unsigned> > values;
  values += 1u,2u,3u;
  boost::copy( values | indirected, std::ostream_iterator<unsigned>( std::cout, " " ) );
  std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但是,我得到了一些错误,例如没有命名的类型element_typeboost::optional<unsigned>.该参考页页,但是,说,单前提条件是存在operator*()一元函数.有没有办法让它发挥作用?

c++ boost boost-optional

9
推荐指数
1
解决办法
1143
查看次数

如何过滤或"grep"C++向量?

我有一个vector<MyType>并希望另一个vector<MyType>只包含满足一些简单标准的MyTypes,例如某些数据成员等于某些东西.解决这个问题的最佳方法是什么?

c++

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

在c ++ boost :: adaptors :: filtered中,管道运算符的作用是什么?

boost::adaptors::filteredfilter函数中的用法如下:

std::vector<int> input;
input += 1,2,3,4,5,6,7,8,9;

boost::copy(
        input | filtered(is_even()),
        std::ostream_iterator<int>(std::cout, ","));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,管道操作员会产生什么影响?它没有为定义std::vector,它是过载吗?如果是这样,一个人如何有效地寻找诸如boost之类的自由经营者?

c++ boost

5
推荐指数
1
解决办法
791
查看次数

标签 统计

c++ ×4

boost ×3

boost-optional ×1

iterator ×1