C++/Java中应该掌握的简单高效的数据结构

来源:互联网 发布:php addslashes和gpc 编辑:程序博客网 时间:2024/06/08 02:34

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++JavaList vectors & listLinkedList & ArrayListDictmapHashMapTuple**


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
0 0
原创粉丝点击