C++中的一些用法

C++中的一些东西,平时可能用的少,或者水平有限,没有涉及,这里记录一些用法,以便学习!

1.取vector的子集

vector<int>(vc.begin() + 1, vc.end())

这里是指,取vc.begin()+1到末尾的所有元素,从而形成一个新的vector数组。例如:

C++中的一些用法
 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     vector<int> vc;
 9     vc.resize(10,0);
10     for (int i = 0; i < 10; i++) {
11         vc[i] = i;
12     }
13     for (int j = 0; j < (vector<int>(vc.begin() + 1, vc.end())).size(); j++)
14         cout << (vector<int>(vc.begin() + 1, vc.end()))[j] << endl;
15     return 0;
16 }
View Code

此种用法,在分治或递归思想中用的较多,如下一道题:

654. 最大二叉树

  给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

  二叉树的根是数组中的最大元素。
  左子树是通过数组中最大值左边部分构造出的最大二叉树。
  右子树是通过数组中最大值右边部分构造出的最大二叉树。
  通过给定的数组构建最大二叉树,并且输出这个树的根节点。

C++中的一些用法

代码如下:

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 private:
12     TreeNode* helper(const vector<int>& nums)
13     {
14         auto it = max_element(nums.begin(), nums.end());
15         if (it == nums.end())   return nullptr;
16         TreeNode* root = new TreeNode(*it);
17         root->left = helper(vector<int>(nums.begin(), it));
18         root->right = helper(vector<int>(it + 1, nums.end()));
19 
20         return root;
21     }
22 public:
23     TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
24         TreeNode* root = helper(nums);
25 
26         return root;    
27     }
28 };

思想:

  每次找到vector中的最大值,这里用的是max_element()函数,然后递归构建前半个数组,即

  vector<int>(nums.begin(), it) 和 后半个数组,即
  vector<int>(it + 1, nums.end())

2.STL中的max_element函数

  函数功能:指向序列之中数组最大元素,包含在algorithm库中。

       函数返回迭代器,时间复杂度O(n)。

  函数原型如下所示:

  C++中的一些用法

 

 3。。。。。。

 

 

上一篇:线阵相机的线扫描速率的计算方法


下一篇:iOS H5(Safari)唤醒App 跳转对应的VC