C++/Java中應該掌握的簡單高校的數據結構
Motivation
Containers In C++
類比於Python中的List
vector
1 基本操作
(1)頭文件#include<vector>.
(2)創建vector對象,vector<int> vec;
(3)尾部插入數字:vec.push_back(a);
(4)使用下標訪問元素,cout<<vec[0]<<endl;記住下標是從0開始的。
(5)使用迭代器訪問元素.
vector<int>::iterator it; for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1個元素前面插入a;
(7)刪除元素: vec.erase(vec.begin()+2);刪除第3個元素
vec.erase(vec.begin()+i,vec.end()+j);刪除區間[i,j-1];區間從0開始
(8)向量大小:vec.size();
(9)清空:vec.clear();
list
頭文件:#include<list>
創建list對象:list<int> l1;
assign() 給list賦值
back() 返回最後一個元素
begin() 返回指向第一個元素的迭代器
clear() 刪除所有元素
empty() 如果list是空的則返回true
end() 返回末尾的迭代器
erase() 刪除一個元素
front() 返回第一個元素
get_allocator() 返回list的配置器
insert() 插入一個元素到list中
max_size() 返回list能容納的最大元素數量
merge() 合併兩個list
pop_back() 刪除最後一個元素
pop_front() 刪除第一個元素
push_back() 在list的末尾添加一個元素
push_front() 在list的頭部添加一個元素
rbegin() 返回指向第一個元素的逆向迭代器
remove() 從list刪除元素
remove_if() 按指定條件刪除元素
rend() 指向list末尾的逆向迭代器
resize() 改變list的大小
reverse() 把list的元素倒轉
size() 返回list中的元素個數
sort() 給list排序
splice() 合併兩個list
swap() 交換兩個list
unique() 刪除list中重複的元素
類比Python中的dict
C++中map容器提供一個鍵值對容器,map與multimap差別僅僅在於multiple允許一個鍵對應多個值。
頭文件:#include<map>
定義一個map對象:map<string, int> my_MAP;
或者是typedef map<string, int> MY_MAP;
MY_MAP my_Map;
- my_Map["a"] = 1;
- my_Map.insert(map<string,int>::value_type("b",2));
- my_Map.insert(pair<string,int>("c",3));
- my_Map.insert(make_pair<string,int>("d",4));
int i = my_Map["a"];
my_Map["a"] = i;
MY_MAP::iterator my_Itr;
my_Itr.find("b");
int j = my_Itr->second;
my_Itr->second = j;
不過注意,鍵本身是不能被修改的,除非刪除。
刪除數據
- my_Map.erase(my_Itr);
- my_Map.erase("c");
其它方法
- my_Map.size() 返回元素數目
- my_Map.empty() 判斷是否爲空
- my_Map.clear() 清空所有元素
- 可以直接進行賦值和比較:=, >, >=, <, <=, != 等等
類比Python中的tuple
Containers in Java
爲了方便的利用數據容器進行引用的管理,Java中提供了豐富的數據容器以滿足程序員多樣化的需求。
JAVA的容器---List,Map,Set
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
對比關係:
Python | C++ | Java |
List | vectors & list | LinkedList & ArrayList |
Dict | map | HashMap |
Tuple | * | * |