C++中的一些东西,平时可能用的少,或者水平有限,没有涉及,这里记录一些用法,以便学习!
1.取vector的子集
vector<int>(vc.begin() + 1, vc.end())
这里是指,取vc.begin()+1到末尾的所有元素,从而形成一个新的vector数组。例如:
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. 最大二叉树
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
代码如下:
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)。
函数原型如下所示:
3。。。。。。