1、棧的用法:
#include<stack>
stack<int> s;
s.push(item); //將item壓入棧頂
s.pop(); //刪除棧頂的元素,但不會返回
s.top(); //返回棧頂的元素,但不會刪除
s.size(); //返回棧中元素的個數
s.empty(); //檢查棧是否爲空,如果爲空返回true,否則返回false
2、vector的用法
#include<vector>
vector<int> vec; //聲明一個int型向量
vector<int> vec(5); //聲明一個初始大小爲5的int向量
vector<int> vec(10, 1); //聲明一個初始大小爲10且值都是1的向量
vector<int> vec(tmp); //聲明並用tmp向量初始化vec向量
vector<int> tmp(vec.begin(), vec.begin() + 3); //用向量vec的第0個到第2個值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};
vector<int> vec(arr, arr + 5); //將arr數組的元素用於初始化vec向量
//說明:當然不包括arr[4]元素,末尾指針都是指結束元素的下一個元素,
//這個主要是爲了和vec.end()指針統一。
vector<int> vec(&arr[1], &arr[4]); //將arr[1]~arr[4]範圍內的元素作爲vec的初始值
向量大小: vec.size();
向量最大容量: vec.max_size();
更改向量大小: vec.resize();
向量真實大小: vec.capacity();
向量判空: vec.empty();
減少向量大小到滿足元素所佔存儲空間的大小: vec.shrink_to_fit(); //shrink_to_fit
多個元素賦值: vec.assign(); //類似於初始化時用數組進行賦值
末尾添加元素: vec.push_back();
末尾刪除元素: vec.pop_back();
任意位置插入元素: vec.insert();//例如vec.insert(vec.begin(),1);
任意位置刪除元素: vec.erase();
交換兩個向量的元素: vec.swap();
清空向量元素: vec.clear();
開始指針:vec.begin();
末尾指針:vec.end(); //指向最後一個元素的下一個位置
指向常量的開始指針: vec.cbegin(); //意思就是不能通過這個指針來修改所指的內容,但還是可以通過其他方式修改的,而且指針也是可以移動的。
指向常量的末尾指針: vec.cend();
下標訪問: vec[1]; //並不會檢查是否越界
at方法訪問: vec.at(1); //以上兩者的區別就是at會檢查是否越界,是則拋出out of range異常
訪問第一個元素: vec.front();
訪問最後一個元素: vec.back();
返回一個指針: int* p = vec.data(); //可行的原因在於vector在內存中就是一個連續存儲的數組,所以可以返回一個指針指向這個數組。這是是C++11的特性.
3、字典的用法
class Solution {
public:
bool isValid(string s) {
unordered_map<char,int> m{{'(',1},{'[',2},{'{',3},
{')',4},{']',5},{'}',6}};
stack<char> st;
bool istrue=true;
for(char c:s){
int flag=m[c];
if(flag>=1&&flag<=3) st.push(c);
else if(!st.empty()&&m[st.top()]==flag-3) st.pop();
else {istrue=false;break;}
}
if(!st.empty()) istrue=false;
return istrue;
}
};
4、集合的用法
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
int n = matrix.size();
int m = matrix[0].size();
set<int> row, col;
// 建立分別關聯行和列的 set 類型 row 和 col
for(int i = 0; i < n; i ++)
for(int j = 0; j < m; j ++)
if(matrix[i][j] == 0)
{
row.insert(i);
col.insert(j);
}
// 遍歷 set 並清零
set<int>::iterator it;
for(int i = 0; i < n; i ++)
for(it = col.begin(); it != col.end(); it ++)
matrix[i][*it] = 0;
for(int i = 0; i < m; i ++)
for(it = row.begin(); it != row.end(); it ++)
matrix[*it][i] = 0;
}
};