榛栗栗栗子 2022-03-13 10:33 采纳率: 100%
浏览 65
已结题

C++ 关于v.begin() 和 begin(v)的问题

像 vector v 这样的标准库容器,发现 auto it = v.begin(); 和 auto it = begin(v); 得到的结果是一样的。一个是容器类内定义的成员函数,一个是C++11引入的begin()函数。

从使用习惯上来说,既让内类定义了成员函数,那应该用它的成员函数,而begin()则多用数组,用于返回指向数组首元素的指针。

但不去考虑使用习惯,只去考虑实现目的的情况下,是不是意味着标准库容器能够无差别的使用这两个函数,也即它们是不是能等效替换的呢?

  • 写回答

1条回答 默认 最新

  • yun6853992 2022-03-13 10:48
    关注

    那你有没有考虑过,begin是所有的容器都可以用呢?还是有哪些限制,为什么这两种方式都可以用,人家是怎么实现的? 你自己定义一个类似的容器功能,能用beging这个函数吗?

    个人理解,他们其实就是实现了相同的功能,要研究的是他们内部实现细节的差异,更多的不是等效替换啥的,而是理解什么场景下可以用到他们,什么场景用它们会出错的问题。 不同的方式而已,说等效有点。。。 只是目的一样而已。(其实关于他们的底层为什么可以这样用的实现,可能值得关注,才知道什么时候可以用)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物