像 vector v 这样的标准库容器,发现 auto it = v.begin(); 和 auto it = begin(v); 得到的结果是一样的。一个是容器类内定义的成员函数,一个是C++11引入的begin()函数。
从使用习惯上来说,既让内类定义了成员函数,那应该用它的成员函数,而begin()则多用数组,用于返回指向数组首元素的指针。
但不去考虑使用习惯,只去考虑实现目的的情况下,是不是意味着标准库容器能够无差别的使用这两个函数,也即它们是不是能等效替换的呢?
像 vector v 这样的标准库容器,发现 auto it = v.begin(); 和 auto it = begin(v); 得到的结果是一样的。一个是容器类内定义的成员函数,一个是C++11引入的begin()函数。
从使用习惯上来说,既让内类定义了成员函数,那应该用它的成员函数,而begin()则多用数组,用于返回指向数组首元素的指针。
但不去考虑使用习惯,只去考虑实现目的的情况下,是不是意味着标准库容器能够无差别的使用这两个函数,也即它们是不是能等效替换的呢?
那你有没有考虑过,begin是所有的容器都可以用呢?还是有哪些限制,为什么这两种方式都可以用,人家是怎么实现的? 你自己定义一个类似的容器功能,能用beging这个函数吗?
个人理解,他们其实就是实现了相同的功能,要研究的是他们内部实现细节的差异,更多的不是等效替换啥的,而是理解什么场景下可以用到他们,什么场景用它们会出错的问题。 不同的方式而已,说等效有点。。。 只是目的一样而已。(其实关于他们的底层为什么可以这样用的实现,可能值得关注,才知道什么时候可以用)