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

发布时间:2024-11-23 04:12

《压力解码器》- 通过科学方法解析压力源 #生活技巧# #健康生活方式# #健康生活方式书籍# #压力管理书籍#

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

1. == 运算符重载

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

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

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());

}

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

实现的源码如下:

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());

}

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源码》  

网址:Vector容器重载运算符源码解析 https://www.yuejiaxmz.com/news/view/203292

相关内容

c++中vector的用法详解
相等运算符运算规则,解释[]==[],[]==![],{}=={},{}==!{}
算法设计与分析
Python :=海象运算符最简单的解释
用PHP中的 == 运算符进行字符串比较
[附源码]JAVA计算机毕业设计成爱生活健康管理软件(源码+开题)
塑料菜板重量计算方法解析(塑料菜板如何计算重量呢)
【巧填运算符号:3333=73333=8=】
在TMS320F2803x微控制器上,如何通过HALL传感器实现直流无刷电机的高精度三相电机控制,并分析提高能源转换效率的方法?
288基于java ssm springboot摄影作品分享系统摄影教程(源码+文档+运行视频+讲解视频)

随便看看