C++/Java中應該掌握的簡單高效的數據結構

C++/Java中應該掌握的簡單高校的數據結構

Motivation

博主是一個技能很low的數據狗,平時用Python用的最順手啦,因爲發現Python真得好用啊,只需要掌握三種簡單的數據結構:List,Dict,Tuple,就可以解決大部分編程需求啦,簡直不能再開心。然而,找實習的時候很多筆試題目是不讓用Python寫的,所以現在需要加強C++和Java的學習。

Containers In C++

類比於Python中的List

vector

通過動態數組實現的。擁有高速的訪問性能,插入和刪除某個元素較list低效。
使用方法:

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;
list對象的成員函數:
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; 

插入數據 
  1. my_Map["a"]   =   1; 
  2. my_Map.insert(map<string,int>::value_type("b",2)); 
  3. my_Map.insert(pair<string,int>("c",3)); 
  4. 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; 


不過注意,鍵本身是不能被修改的,除非刪除。 
  
刪除數據 
  1. my_Map.erase(my_Itr); 
  2. my_Map.erase("c"); 
還是注意,第一種情況在迭代期間是不能被刪除的,道理和foreach時不能刪除元素一樣。 
  
其它方法 
  1.   my_Map.size()               返回元素數目 
  2.   my_Map.empty()       判斷是否爲空 
  3.   my_Map.clear()           清空所有元素 
  4.   可以直接進行賦值和比較:=,   >,   >=,   <,   <=,   !=   等等 

類比Python中的tuple

Python中的Tuple可以理解爲不能修改的List,可以申請常量的類List容器來替代Tuple。


Containers in Java

See details in reference[5]

爲了方便的利用數據容器進行引用的管理,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 * *



references:
[1] http://www.cnblogs.com/wang7/archive/2012/04/27/2474138.html
[2] http://blog.csdn.net/lskyne/article/details/10418823
[3] http://www.cnblogs.com/anywei/archive/2011/10/27/2226830.html
[4] http://www.cplusplus.com/reference/stl/
[5] http://www.cnblogs.com/airwindow/archive/2012/06/24/2560196.html
發佈了82 篇原創文章 · 獲贊 15 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章