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中重复的元素
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;
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
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
- C++/Java中应该掌握的简单高效的数据结构
- JAVA应该掌握的知识点
- JAVA到C#.net应该掌握的一些基础语法
- C/C++程序员应该掌握的东西
- Eclipse中应该掌握的快捷键
- Eclipse中应该掌握的快捷键
- Eclipse中应该掌握的快捷键
- java开发人员应该掌握的数据库知识
- 学java应该掌握的知识
- java开发人员应该掌握的数据库知识
- 一个java程序员应该掌握的(转)
- java程序员应该掌握的十项技能
- java程序员应该掌握的东东
- 初级java开发人员应该掌握的知识
- 学习android应该掌握的JAVA知识
- 合格Java程序员应该掌握的东西
- java 开发实习生应该掌握的技术
- JAVA程序员应该掌握的排序算法
- mac实用tips
- 练习2-6 编写一个函数setbits(x,p,n,y),将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值
- 实验七-最大公约和和最小公倍数
- Volley中用到的设计模式
- 页面在ie浏览器出现的多个兼容性问题和解决方案
- C++/Java中应该掌握的简单高效的数据结构
- JavaScript 列表重构
- C++实验7-特殊三位数
- mac上命令行补全
- Linux学习之for循环
- Plus One
- C++作业7
- C++实验7-求最大公约数和最小公倍数
- c++第7次实验——项目3特殊三位数