Vector容器重载运算符源码解析

vector容器是特别有用的工具,可以完美取代数组,底层是基于数组实现的。这里主要介绍它的重载运算符==,该运算符可以实现快速判断两个数组是否是一样的。具体实现,如下代码:

1. == 运算符重载

判断两个数组是一样的,要满足两个条件:①两个Vector容器的大小要一样 ②固定位置上的值要一样

具体运用:https://leetcode.com/problems/permutation-in-string/

//stl_vector.h
template <class T, class Alloc>
inline bool operator==(const vector<T, Alloc>& x, const vector<T, Alloc>& y) {
  return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
}
//stl_algobase.h
template <class InputIterator1, class InputIterator2>
inline bool equal(InputIterator1 first1, InputIterator1 last1,
		  InputIterator2 first2) {
  for ( ; first1 != last1; ++first1, ++first2)
    if (*first1 != *first2)
      return false;
  return true;
}

2. < 重载运算符

<重载运算符的比较过程:依次比较数组中存储的元素的值

①若第一个数组的值小于第二个数组的值,返回true;反之,若小于,则返回false。例如[1, 2, 3] 和 [2, 3, 4] ,返回true

②若前面出现的元素的值都相等;若第一个数组的长度小于第二个数组的长度,则返回true;否则返回false

实现的源码如下:

//stl_vector.h
template <class T, class Alloc>
inline bool operator<(const vector<T, Alloc>& x, const vector<T, Alloc>& y) {
  return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
}
//stl_algobase.h
template <class InputIterator1, class InputIterator2>
bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1,
			     InputIterator2 first2, InputIterator2 last2) {
  for ( ; first1 != last1 && first2 != last2; ++first1, ++first2) {
    if (*first1 < *first2) //比较数组中存储的值
      return true;
    if (*first2 < *first1)
      return false;
  }
  return first1 == last1 && first2 != last2;
}

[1]《STL3.0源码》  

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值