是否还可以自定义STL向量的“参考”类型?

2023-12-15

是否可以定制reference of a std::vector。 直到 C++11 似乎可以通过Allocator模板参数。 但现在不再了吗?

根据文档,http://en.cppreference.com/w/cpp/container/vector, reference现在总是value_type and value_type始终是模板参数T.

即使使用似乎也是不可能的allocator_traits, http://en.cppreference.com/w/cpp/memory/allocator_traits

有解决方法吗?

如果不是,是否意味着我必须专攻整个std::vector如果我想要一个特殊的,可能会重现它的所有功能reference基于分配器的类型?

如果是这样,一般来说所有这些限制的逻辑是什么?强制用户使用std::vector<T, A>始终管理常规内存(其中,value_type = T, reference = T& and pointer = T*?)


注意:我知道std::vector<bool>争议。然而,这有点更笼统,因为原则上我需要一个自定义std::vector<RegularType, special_allocator<RegularType>>主要是控制返回类型operator[](int)到一个特殊的代理对象。


具体实现:我正在查看GCC 6.3.1的stdlib源并在std_vector.h人们可以读到:

template<typename _Tp, ...>
class vector : ...{
   ...
   public:
   typedef typename _Alloc_traits::reference          reference;
};

这似乎表明仍然可以通过allocator (_traits?).

根据文档,allocator or the allocator_traits不需要有reference类型。 另外,我不知道如何自定义这种类型。

GCC不遵循标准吗?或者只是间接地allocator_traits<Allocator>::reference被迫成为allocator_traits<Allocator>::value_type&?


如果是这样,一般来说所有这些限制的逻辑是什么?

目的是停止承诺 C++ 无法实现的东西。

早在 C++98/03 时代,人们就认为代理类型、专用引用等可以真正与标准库容器和算法一起使用。当 C++11 推出时,人们已经非常清楚地意识到……不,他们真的不能。或者至少,与实际语言参考的语义不同。

考虑到这一点,C++11 删除了许多不再合理的自定义点。 typedef 被保留下来,但主要是为了向后兼容。

这似乎表明仍然可以通过分配器指定引用类型(_traits?)。

不,不是。这是 libstdc++ 中的一个错误;reference is required to be value_type&现在对于容器来说。allocator_traits has no reference定制点。

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

是否还可以自定义STL向量的“参考”类型? 的相关文章

  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • 我如何学习如何在 bash 中正确引用?

    当我编写 bash 脚本时 我经常对引用和评估的规则感到困惑 我知道一些基础知识 比如 和 和 之间的区别 但我似乎仍然经常出错 并且不得不尝试用各种不同的方式来表达同一件事 我通常可以通过蛮力解决任何个人问题 但我认为我的概念模型必须以某
  • Windows Phone 7 - 电话呼叫连接和电话呼叫断开时触发的事件

    我正在为 Windows Mobile 7 编写一个应用程序 它需要有关 何时发出语音呼叫 和 何时挂断或断开语音呼叫 的信息 是否有任何 API 或事件 触发器可以为我提供此信息 当前的 SDK 不提供此功能 通常 由于沙盒环境默认不提供
  • FastAPI 重定向给出方法不允许错误

    我创建了一个登录路径 在其中发布表单数据并设置 cookie 设置cookie后 我重定向到 main 在那里我得到 detail Method Not Allowed 作为回应 app post login async def login
  • ViewChild - 无法在 Angular 2 RC 1 JavaScript 中工作

    ViewChild 无法在 Angular 2 RC 1 JavaScript 中工作 我用过
  • RibbonApplicationMenu:摆脱 AuxiliaryPane

    碰巧我正在开发的应用程序不对文档进行操作 因此不需要在应用程序菜单中显示最近打开的文档列表 但是 令人烦恼的是 没有现成的房产RibbonApplicationMenu隐藏未使用的类AuxiliaryPane 奇怪的是 该属性确实存在 但被
  • 单击关闭按钮时隐藏表单而不是关闭

    When a user clicks the X button on a form how can I hide it instead of closing it 我努力了this hide in FormClosing但它仍然关闭表单 L
  • Outlook 2013“运行脚本”规则已消失

    我在 Outlook 2013 中有一些工作规则 然而 在我的笔记本电脑前几天崩溃后 我无法再运行任何规则 它们根本不起作用 我什至没有收到调试通知 检查我的宏后 我发现当我尝试单击我拥有的任何脚本时 我不断收到消息 此操作在当前模式下不可
  • iOS XMPP 框架与 Openfire Server 获取所有注册用户

    for my IOS我正在使用的聊天应用程序Openfire服务器 我正在检索特定用户好友列表 但现在我想检索所有注册用户Openfire服务器 请帮助我并提前致谢 最后 我通过使用用户名搜索用户找到了替代答案 1 对于每个联系人 我都会添
  • 如何在高分辨率设备上使用媒体查询

    我制作了一个简单的响应式网站 或多或少 我使用过媒体查询 media only screen and max width 699 99px 现在我知道当分辨率小于 699 99px 时 这会激活其中的 css 所以在电脑上没问题 但在手机上
  • 散景,套索选择表更新

    我希望每个人都做得很好 我正在尝试开发 Bokeh 交互 选择散点图的一部分将更新表格 我使用了 Bokeh 文档中的大量示例代码 我的工作场所正在运行旧版本的 Bokeh 0 12 5 因此我必须更改自定义 JS 中的最后一行 从 s2
  • Pandas:使用 Append 添加新列并使另一个全为 NaN

    我大约一周前才开始学习 pandas 现在我一直在努力处理 pandas 数据框 我的数据如下所示 State NY CA Other Total Year 2003 450 50 25 525 2004 300 75 5 380 2005
  • 在 Pandas 中合并两行(一行有值,另一行 NaN)

    我知道以前也有人问过类似的问题 如何合并数据框中的两行pandas等 但我仍然在努力执行以下操作 除了包含许多行的 pandas 数据框 team token day1 day2 day3 day4 0 abc 1 NaN NaN NaN
  • 如何获取客户端 IP 地址的时区偏移量

    我想为我的网络应用程序获取客户 IP 地址的时区偏移量 我尝试过使用 Javascripts getTimezone 函数 但是 某些客户端的时区或时间设置不正确 我想获取偏移量并根据客户端的时区将一些信息返回给客户端 感谢您花时间阅读问题
  • send() 在 Ruby 中做什么?

    有人可以告诉我下面的片段是什么吗 obj send method name 是并且确实吗 send向类层次结构中的对象实例及其祖先发送消息 直到某个方法做出反应 因为它的名称与第一个参数匹配 实际上 这些行是等效的 1 send 2 1 2
  • 如何测试依赖于argparse的Python类?

    下面的粘贴包含来自三个单独的 Python 文件的相关片段 第一个是从命令行调用的脚本 它在给定某些参数的情况下实例化 CIPuller 发生的情况是脚本被调用 类似于 script py ci 其他参数将被 argparse 吞掉 第二个
  • 访问jar内的图像

    第一的 我知道已经存在各种关于如何访问 jar 文件内的图像的主题 第二 我尝试了很多选择 但没有一个不起作用 我当然知道我在某个地方犯了错误 你能帮助我理解我做错了什么吗 所以 我有一个名为 j 的原型项目 它只包含一个 java 类 C
  • 使用 Jackson 序列化时有条件地跳过对象

    我有一个像这样的课程 interface IHideable boolean isHidden class Address implements IHideable private String city private String st
  • Android Activity 在 4.3 设备上运行缓慢

    我开发了一个可以从网络传输视频的应用程序 我有一个活动列出了视频 包括它们的图标 标题和状态 新更新 每行都有一个视频缩略图 视频标题 然后有一个 新鲜 图标来指示它是新上传的 在模拟器中 这工作得相当好 在 2 3 和 4 0 3 HTC
  • 使用 Python 与其他程序交互

    我有一个想法 使用 Python 编写一个程序 该程序将找到我提供的歌曲的歌词 我认为整个过程应该归结为以下几件事 这些是我希望程序在运行时执行的操作 提示我输入歌曲名称 复制那个名字 打开网络浏览器 例如谷歌浏览器 将该名称粘贴到地址栏中
  • 是否还可以自定义STL向量的“参考”类型?

    是否可以定制reference of a std vector 直到 C 11 似乎可以通过Allocator模板参数 但现在不再了吗 根据文档 http en cppreference com w cpp container vector