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

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

1. == 运算符重载

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

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

//stl_vector.h
template 
inline bool operator==(const vector& x, const vector& y) {
  return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
}
//stl_algobase.h
template 
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 
inline bool operator<(const vector& x, const vector& y) {
  return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
}
//stl_algobase.h
template 
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源码》  

你可能感兴趣的:(STL库源码)