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 | * | * |