将 boost::transform_iterator 与非常量函子一起使用

2023-12-06

I want to use a transform_iterator to make a delta transformation on a range. By delta transformation I mean that r0 should stay the same and the subsequent elements, ri, are mapped to (ri - ri - 1).

我的问题是,据我所知,transform_iterator 需要一个 const 函子,但我的函子需要记住以前的值。我该如何解决这个问题?我应该编写自己的迭代器吗?

我希望它作为迭代器的原因是,在下一步中我想从中创建一个范围适配器。

编辑: 看来transform_iterator确实允许非常量函子,而且确实是我的范围适配器抱怨缺乏常量。我将保持这个问题的开放性,因为关于使用transform_iterator 是否合适的讨论似乎很有趣。


我认为你不能使用 boost::transform_iterator 完全正确地完成这项工作。这是一个简单的实现,乍一看似乎可以工作,但实际上效果不佳:

#include <boost/iterator/transform_iterator.hpp>
#include <vector>
#include <iostream>

using std::cout;

struct Delta {
  Delta() : prev_value(0) { }

  int operator()(int value) const
  {
    int result = value-prev_value;
    prev_value = value;
    return result;
  }

  mutable int prev_value;
};

int main(int,char**)
{
  typedef std::vector<int> Items;
  typedef boost::transform_iterator<Delta,Items::iterator,int> Iter;

  Items items;
  items.push_back(4);
  items.push_back(3);
  items.push_back(8);
  { // prints 4 -1 5  -- excellent
    Iter i(items.begin(),Delta()), end(items.end(),Delta());
    for (;i!=end;++i) {
      cout << *i << " ";
    }
    cout << "\n";
  } 
  { // prints 4 0 -- crap
    Iter i(items.begin(),Delta());
    cout << *i << " ";
    cout << *i << "\n";
  }
  return 0;
}

为了真正做到这一点,您需要知道迭代器何时高级,所以我认为您需要自己的迭代器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 boost::transform_iterator 与非常量函子一起使用 的相关文章

  • 添加 Nullable int 时保持 null?

    我想添加可为空的int 并保留null当所有值都是null 我想要这个结果 1 2 3 1 null 1 null null null O null 0 问题是 如果我将一个值与 null 相加 结果为 null int i1 1 int
  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • 将 new 与 decltype 一起使用

    T t T is an implementation detail t new T want to avoid naming T to allow for flexibility t new decltype t error cannot
  • 您可以从基本 Win32 控制台模板应用程序中的 C#/Winrt 组件调用(不是 WinForm/abstractions/wrappers 或使用 C++/Winrt 模板)吗?)

    我有一个现有的程序 win32 x86 控制台应用程序 需要调用托管代码 来自 Net 的 C dll The dll不暴露给 COM 但可以从 C WinRT 组件调用并由 C WinRT 控制台模板应用引用 BUT即使安装了 C Win
  • 单元测试验证失败

    我正在运行我的单元测试PostMyModel路线 然而 在PostMyModel 我用的是线Validate
  • C++ 长 switch 语句还是用地图查找?

    在我的 C 应用程序中 我有一些值充当代表其他值的代码 为了翻译代码 我一直在争论使用 switch 语句还是 stl 映射 开关看起来像这样 int code int value switch code case 1 value 10 b
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 是否存在指向不同类型的指针具有不同大小的平台?

    C 标准允许指向不同类型的指针具有不同的大小 例如sizeof char sizeof int 是允许的 但是 它确实要求如果将指针转换为void 然后转换回其原始类型 它必须与其原始值进行比较 因此 从逻辑上来说 sizeof void
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 搜索实体的所有字段

    我正在尝试在客户数据库上实现 多功能框 类型的搜索 其中单个查询应尝试匹配客户的任何属性 这是一些示例数据来说明我想要实现的目标 FirstName LastName PhoneNumber ZipCode Mary Jane 12345
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • CUDA 8 编译错误 -std=gnu++11

    我正在尝试转换一些代码以使用 CUDA 并且我认为我遇到了兼容性问题 我们使用CMake 这些是我使用的 gcc 和 CUDA 版本 gcc version gcc Ubuntu 5 4 0 6ubuntu1 16 04 5 5 4 0 2
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC

随机推荐

  • 如何使用 JAVASCRIPT 播放和暂停嵌入的 Spotify?

    有人可以解释一下如何播放和暂停这个 Spotify 嵌入对象吗 我试图找到该玩家的 ID 但找不到 URL https open spotify com embed podcast show 5iKz9gAsyuQ1xLG6MFLtQg 这
  • 在 AVX2 中重现 _mm256_sllv_epi16 和 _mm256_sllv_epi8

    我很惊讶地看到 mm256 sllv epi16 8 m256i v1 m256i v2 and mm256 srlv epi16 8 m256i v1 m256i v2 不在英特尔内联指南我没有找到任何解决方案来仅使用 AVX2 重新创建
  • 无法在 Ubuntu 上安装 Elastic Beanstalk CLI

    我正在尝试使用以下命令在新的 Ubuntu 14 04 在适用于 Windows 的 Linux 子系统上 上安装 Elastic Beanstalk CLI awsebcli sudo pip install awsebcli 但启动eb
  • 如何从文本文件列表中的单词中删除行?

    file1 gt word list txt gt 超过 1 000 000 行 file2 gt list txt gt 超过 1 000 000 行 我有一个包含单词列表的文件 我想从一个大文本文件中删除此文件中所有单词的所有出现 Ex
  • SQLSTATE[HY093] :插入 mysql 数据库期间的 pdo 语句

    这是我实现插入数据库的php代码
  • Android XML 对象序列化

    我想在 Android 中将对象序列化为 XML 有建议的库吗 PS 已经尝试过 XStream 但它无法在 Android 上正确序列化枚举 问题在这里 Android 中枚举的序列化问题 你有没有尝试过简单的http simple so
  • 为什么 SQL Server 2012 中的变量表回滚不起作用?

    我创建了一个变量表 在我的存储过程中 有很多事务 现在 每当发生错误时 我想回滚特定事务 该事务包含一些从变量表中插入 更新或删除记录的语句 这只是我的实际问题的一个例子 declare tab table val int insert i
  • 进度条属性改变事件不触发

    我正在使用 JProgressBar 显示从 DataBase 加载的数据的进度 我正在使用 SwingWorker 类来加载后台线程中的数据Tutorial 我的应用程序的 ProgressBar 的属性更改事件没有触发 请指导我我做错了
  • PostgreSQL:count() 还是保留一个计数器?

    我有两个处于一对多关系的表 假设对于表中的每一行foo 表中可以有 0 行或多行bar引用该行foo 客户想知道有多少行bar引用一行foo 对于中的所有行foo 我可以通过以下查询来完成此操作 SELECT count bar id FR
  • 在 Matlab 中将字符串单元格转换为双精度型

    我如何转换单元格如下 gt gt A 2 2 23 23 6 A 2 2 23 23 6 为以下双倍 A 2 0000 2 0000 NaN 23 0000 23 6000 str2double可以直接在字符串元胞数组上调用 gt gt X
  • 重新检查文档的拼写是否与 VBA 代码不同

    我想在添加字典后重新检查文档中的拼写 问题是下面的代码 大部分来自宏记录器 CustomDictionaries Add FileName c test dictionary dic Application ResetIgnoreAll A
  • NoClassDefFoundError FirebaseOptions,android?

    当我在设备上运行我的应用程序时 我收到此异常 java lang NoClassDefFoundError com google firebase FirebaseOptions at com google firebase Firebas
  • 如何使用字符串联合填充对象类型的可选嵌套关系?

    我正在尝试创建一个Populate需要 2 个泛型的类型 具有可选关系的对象类型 引用其他对象类型的键 以及可以深度填充 或者更确切地说 设置为非可选 关系的 Path 字符串的联合 例如 有 3 个实体 它们都可以选择性地相互引用 typ
  • 将Actionbarsherlock导入到eclipse中

    有人可以告诉我如何正确导入 SherlockFragmentActivity java 和 ActionBarSherlock 文件夹的步骤吗 我不太确定如何做到这一点 并且在尝试时遇到很多错误 提取 ActionBarSherlock 项
  • javascript eval 可能会带来哪些问题

    我尝试谷歌搜索 但没有得到非常具体的答案 话又说回来 我可能没有使用正确的关键字 有人能指出 javascript eval 可能导致的 安全 问题吗 举个例子 非常好 如果您可以指向具有相同功能的现有网络资源 也可以 Edit 我只需要评
  • MS Access 在传递查询中使用表单

    我有一个名为菲茨 安特 达根 一个名为查询FietsAantDagen和一个名为Txtinput 我正在尝试使用 SQL Server 的直通查询 并使用文本表单的输入作为查询中的输入 Query SELECT Fiets id Fiets
  • 在c++/windows中获取线程状态

    必须有一个函数来获取系统中线程的当前状态 因为有这个应用程序 http www softwareverify com cpp thread status monitor index html 它必须使用某种 API 函数或其他东西 如何在
  • d3嵌套分组条形图

    首先 如果我的英语很难理解 我会尽力的 我对 D3 js 相当陌生 我正在尝试使用嵌套数据创建 D3 分组条形图 我查看了此处共享的一些解决方案 但它们仅显示一级分组 就我而言 数据将来自具有以下数据结构的 csv 文件 groups ca
  • 多次调用 Looper 会导致“向死线程上的处理程序发送消息”

    我使用 Executor 固定线程池 和我自己的 ThreadFactory 添加了 Looper Handler HANDLER new Handler Executor THREADS Executors newFixedThreadP
  • 将 boost::transform_iterator 与非常量函子一起使用

    I want to use a transform iterator to make a delta transformation on a range By delta transformation I mean that r0 shou