何时使用 std::begin 和 std::end 而不是容器特定版本[重复]

2023-12-12

是否有任何一般偏好或规则来解释何时应使用容器特定版本的 begin 和 end 而不是自由函数std::begin and std::end?

据我了解,如果函数是模板,其中容器类型是模板参数,那么std::begin and std::end应该使用,即:

template<class T> void do_stuff( const T& t )
{
    std::for_each( std::begin(t), std::end(t), /* some stuff */ );
}

在其他场景(例如已知容器类型的标准/成员函数)中又如何呢?使用还是更好的做法std::begin(cont) and std::end(cont)或者应该容器的成员函数cont.begin() and cont.end()被优先考虑?

我是否正确地假设通过调用对性能没有任何好处?cont.end() over std::end(cont)?


自由函数版本比容器的成员函数更通用。我可能会在通用代码中使用它,其中容器的类型事先未知(并且可能是数组)。在代码的其余部分(即当容器固定且已知时)我可能会使用c.begin()由于惯性。我希望关于 C++ 的新教科书会推荐自由函数版本(因为它永远不会更糟,有时甚至更好),但这必须赶上常见用法。

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

何时使用 std::begin 和 std::end 而不是容器特定版本[重复] 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当

随机推荐

  • 生成 10 的倍数的随机数

    我希望在两个范围之间创建一个 10 倍数的随机数 例如 如果我向函数提供参数0 100它将返回以下数字之一 0 10 20 30 40 50 60 70 80 90 100 但没有什么像63 or 55 是的 我知道这违背了真正的 随机性
  • 如何在 Android 上显示警报对话框?

    我想显示一个对话框 弹出窗口 并向用户显示一条消息 显示 您确定要删除此条目吗 带有一个 删除 按钮 什么时候Delete被触及 它应该删除该条目 否则什么也没有 我已经为这些按钮编写了一个单击侦听器 但是如何调用对话框或弹出窗口及其功能
  • 在 JS/jQuery 中触发 keypress/keydown/keyup 事件?

    在 JS 和 或 jQuery 中模拟用户在文本输入框中输入文本的最佳方法是什么 I don t想要实际在输入框中输入文本 我只想触发所有事件handlers通常由用户在输入框中输入信息来触发 这意味着焦点 按键 按键 按键和模糊 我认为
  • AsyncTask 内的 Android NetworkOnMainThreadException

    当我尝试使用 google calendar api 时 我在 ICS 上遇到问题 为了获取事件列表 我有一个 AsyncTask 并在 doInBackground 内部进行服务调用 但仍然收到 NetworkOnMainThreadEx
  • SublimeREPL 和 IPython

    当我尝试将 IPython 与 SublimeREPL 一起使用时 我失败了 我的设置是 Windows 8 1 Sublime Text 3 C Python34 C Python27 C Anaconda3 Scripts gt Her
  • SwiftUI 和 AppKit:使用关闭对话框询问是否允许应用程序退出

    我正在使用 Big Sur 和 SwiftUI 以及 SwiftUI 生命周期 我想实现一个警报 询问用户是否可以退出应用程序 SwiftUI 怎么可能做到这一点 它应该看起来像这样 可以使用此代码 此代码打开Alert仅在关键窗口中 im
  • SQL为每个年龄返回100个随机行

    对于每个 i Age 0 100 我想使用所选数据为每个年龄返回 100 个随机行 我不确定是否应该使用 while 循环来完成此操作 或者是否应该使用带有限制的 group by 来完成此操作 我看过很多不同的例子 但我仍然很困惑 SEL
  • 如何在c#中将数组的内容打印到标签[重复]

    这个问题在这里已经有答案了 我想从每个数字之间用逗号分隔的标签显示数组的内容 num1 num6 是从文本框转换而来的整数变量 到目前为止我已经做到了这一点 int number new int 6 num1 num2 num3 num4
  • 在配置中找不到指定的命名连接,不适合与 EntityClient 提供程序一起使用,或者无效

    我有一个实体框架对象 当我将其添加到我的项目中时 connectionstring被添加到app config in the connectionstring部分 但是当我想创建新的entitycontext并使用这个connections
  • 调整 AudioUnit 缓冲区的长度

    我的问题涉及音频单元 为了设计适用于 iPhone 的变声应用程序 使用 Objective C xCode 我使用此网站上的 RemoteIO audioUnit 示例 http atastypixel com blog using re
  • Odoo 10:从向导中调用确认表(是/否)

    我想在我的采购订单中添加一个 取消 按钮 此按钮会将我的记录状态更改为 已取消 当用户单击此按钮时 脚本会验证所有购买查询和提供商订单 如果有任何订单尚未完成或取消 我想添加一个弹出窗口来警告用户有关它们的信息 用户可以取消操作或追查 并取
  • 将 List.Contains 转换为表达式树

    相关 创建具有 3 个条件的 Lambda 表达式 将包含转换为表达式树 在我之前的问题的下面 我遇到了我想写的这个查询Expression Tree版本 List
  • twitter-bootstrap 按钮 javascript 不起作用

    我有一个控制组 其中一个按钮组作为复选框 如下所示 div class control group div
  • 在 Javascript 中将字符串添加到数字

    我有功能addNumber如果我单击具有特定值的按钮 该值将连接到变量 b 但如果 a 的值不是数字 则该函数不起作用 我缺少什么 我认为该函数使用参数 a 就像它是一个字符串一样 否则 数字就会被累加起来 因此 如果b 0 a x 的结果
  • 已安装的软件包在 Google Cloud Shell 中消失

    我尝试在 Google Cloud Platform Console 中安装一堆 python 包 但磁盘空间不足 安装失败 有趣的是 在某些时候 网络连接丢失了 我应该重新连接它 然后我检查了一些在尝试安装其他 python 软件包之前已
  • 从 Python 运行 bash 脚本

    我需要从 Python 运行 bash 脚本 我让它按如下方式工作 import os os system xterm hold e scipt sh 这不完全是我正在做的事情 但几乎是我的想法 工作正常 打开一个新的终端窗口 我将其保留用
  • 合并具有多个匹配项的数据框时仅选择第一行

    我有两个数据框 数据 和 分数 并想将它们合并到 id 列上 data data frame id c 1 2 3 4 5 state c KS MN AL FL CA scores data frame id c 1 1 1 2 2 3
  • JavaScript 错误:“不是函数”

    看起来 smth 不是函数 是 JavaScript 中一个非常常见的问题 但是在查看了相当多的线程之后 我仍然无法理解在我的情况下是什么导致了它 我有一个自定义对象 定义为 function Scorm API 12 var Initia
  • phpunit 中未定义的 action()

  • 何时使用 std::begin 和 std::end 而不是容器特定版本[重复]

    这个问题在这里已经有答案了 是否有任何一般偏好或规则来解释何时应使用容器特定版本的 begin 和 end 而不是自由函数std begin and std end 据我了解 如果函数是模板 其中容器类型是模板参数 那么std begin