if(),一个巧妙的语句

84 阅读2分钟

首先简单说下if()语句,如果if语句()里面的表达式为真,就执行里面的程序,而c++允许if()语句可以不是bool类型的表达式,这就很有意思了。举个例子:

QQ20250213-194727.png

你提供的这段 C++ 代码定义了一个名为 Solution 的类,其中包含一个成员函数 intersection,用于找出两个整数向量 nums1 和 nums2 的交集。交集是指同时存在于两个向量中的元素所组成的集合,且每个元素在结果中只出现一次。

代码详细解释

  1. 类和函数定义 class Solution { public: vector intersection(vector& nums1, vector& nums2) { class Solution:定义了一个名为 Solution 的类。 vector intersection(vector& nums1, vector& nums2):这是一个公共成员函数,它接受两个整数向量的引用 nums1 和 nums2 作为参数,并返回一个整数向量,该向量包含 nums1 和 nums2 的交集元素。

  2. 创建集合 st unordered_set st(nums1.begin(), nums1.end()); unordered_set:这是一个无序集合,其中的元素是唯一的。 st(nums1.begin(), nums1.end()):使用向量 nums1 的所有元素初始化集合 st。这一步的时间复杂度是 ,其中 是 nums1 的长度。

  3. 初始化结果向量 ans vector ans; vector ans:创建一个空的整数向量 ans,用于存储最终的交集结果。

  4. 遍历 nums2 并找出交集元素 for (int x : nums2) { if (st.erase(x)) { // x 在 st 中 ans.push_back(x); } } for (int x : nums2):使用范围 for 循环遍历向量 nums2 中的每个元素。 if (st.erase(x)):调用集合 st 的 erase 方法尝试移除元素 x。如果 x 存在于 st 中,erase 方法会移除该元素并返回 1(表示移除成功);如果 x 不存在,erase 方法返回 0。由于非零值在布尔上下文中被视为 true,零值被视为 false,所以这个条件判断可以检查 x 是否存在于 st 中。 ans.push_back(x):如果 x 存在于 st 中,将其添加到结果向量 ans 中。这一步的时间复杂度是 ,其中 是 nums2 的长度。

  5. 返回结果向量 return ans; 返回存储交集元素的向量 ans。 ————————————————

                         版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                     
    

原文链接:blog.csdn.net/2403_868313…