数据结构 |
描述 |
实现头文件 |
向量(vector) |
连续存储的元素 |
|
列表(list) |
由节点组成的双向链表,每个结点包含着一个元素 |
|
双队列(deque) |
连续存储的指向不同元素的指针所组成的数组 |
|
集合(set) |
由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 |
|
多重集合(multiset) |
允许存在两个次序相等的元素的集合 |
|
栈(stack) |
后进先出的值的排列 |
|
队列(queue) |
先进先出的执的排列 |
|
优先队列(priority_queue) |
元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 |
|
映射(map) |
由{键,值}对组成的集合,以某种作用于键对上的谓词排列 |
|
多重映射(multimap) |
允许键对有相等的次序的映射 |
|
标准库vector类型使用需要的头文件:#include
vector 是一个类模板,不是一种数据类型,vector
vector的存储空间是连续的,list不是连续存储的。
vector< typeName > v1; //默认v1为空,故下面的赋值是错误的v1[0]=5;
vector
vector< typeName > v3(n,i);//v3包含n个值为i的typeName类型元素
vector< typeName > v4(n); //v4含有n个值为0的元素
vector
vector
1. v.push_back(t) 在容器的最后添加一个值为t的数据,容器的size变大。
2. v.size() 返回容器中数据的个数,size返回相应vector类定义的size_type的值。
3. v.empty() 判断vector是否为空
4. v[n] 返回v中位置为n的元素
5. v.insert(pointer,n,content) 向v中pointer指向的位置插入n个content的内容。
v.insert(pointer,a[2],a[4]) 将a[2]到a[4]三个元素插入。
6. v.pop_back() 删除容器的末元素,并不返回该元素。
7. v.erase(pointer1,pointer2) 删除pointer1到pointer2中间(包括pointer1所指)的元素。
vector中删除一个元素后,此位置以后的元素都需要往前移动一个位置,虽然当前迭代器位置没有自动加1,但是由于后续元素的顺次前移,也就相当于迭代器的自动指向下一个位置一样。
8. v1==v2 判断v1与v2是否相等。
9. !=、<、<=、>、>= 保持这些操作符惯有含义。
10. vector
p=v1.end( ); p指向v1的最后一个元素的下一位置。
12. v.clear() 删除容器中的所有元素。12.v.clear() 删除容器中的所有元素。
13. v.resize(2*v.size)或
v.resize(2*v.size, 99) 将v的容量翻倍(并把新元素的值初始化为99)
#include "stdafx.h"
#include
#include
#include
using namespace std;
void init_vector(vector&vec,int num);
void print_vector(vector&vec);
void insert_array_to_vector(vector &vec,int a[],int len);
int _tmain(int argc, _TCHAR* argv[])
{
int pause;
int a[] = {2,4,3,6,8,2,1,4,3};
cout< vec;
//初始化
insert_array_to_vector(vec,a,sizeof(a)/sizeof(int));
//查找
vector::iterator found;
found = find(vec.begin(),vec.end(),6);
if ( found != vec.end() )
cout << "search_value found!"<<*found<<"\n";
else
cout << "search_value not found!\n";
//逆置
reverse(vec.begin(),vec.end());
//排序
sort(vec.begin(),vec.end());
//打印
print_vector(vec);
cin>>pause;
return 0;
}
void init_vector(vector&vec,int num){
for(int i=0;i&vec){
vector::iterator iterator = vec.begin();
while(iterator!=vec.end()){
cout<<*iterator<<" ";
iterator++;
}
cout< &vec,int a[],int len){
for(int i =0;i
xxx
list slist;
slist.push_back("xx");
slist.push_back("oo");
slist.push_front("lala");
list::iterator literator = slist.begin();
while(literator!=slist.end()){
cout<<*literator++<<" "<
map name;
string temp;
for(int i=0;i>temp;
name[temp]=true;
}
s.push(x)入栈。
s.pop() 出栈。注意,出栈操作只是删除栈顶元素,并不返回该元素。
s.top() 访问栈顶
s.empty()判断栈空
s.size() 栈大小
stack intStack;
for(int i=0;i<10;i++){
intStack.push(i);
}
cout<
q.push(x)入队,将x接到队列的末端。
q.pop() 出队,弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
q.front() 访问队首元素。
q.back() 访问队尾元素。
q.empty()判断队列空。
q.size() 访问队列中的元素个数。
deque
deque intDeque;
for(int i =0;i<10;i++){
intDeque.push_front(i);//或intDeque.push_back(i);
}
while(!intDeque.empty()){
cout<
queue intQueue;
for(int i=0;i<10;i++){
intQueue.push(i);
}
while(!intQueue.empty()){
cout<
#include
搜索算法:find() 、search() 、count() 、find_if() 、search_if() 、count_if()
分类排序:sort() 、merge()
删除算法:unique() 、remove()
生成和变异:generate() 、fill() 、transformation() 、copy()
关系算法:equal() 、min() 、max()
xxx
#include "stdafx.h"
#include
#include
#include
#include
using namespace std;
class MyComplex{
private:
int real;
int imag;
public:
MyComplex();
MyComplex(int real,int imag);
~MyComplex();
MyComplex(const MyComplex& other);
MyComplex& operator=(const MyComplex& other);
MyComplex operator+(const MyComplex& other);
MyComplex operator+=(const MyComplex& other);
bool operator==(const MyComplex& other);
bool operator!=(const MyComplex& other);
friend std::istream& operator>>(std::istream & input,MyComplex & com);
friend std::ostream& operator<<(std::ostream & output,const MyComplex & com);
void SetReal(int real);
void SetImag(int imag);
void SetVal(int real,int imag);
inline int GetReal() const;
inline int GetImag() const;
};
MyComplex::MyComplex():real(0),imag(0){
}
MyComplex::MyComplex(int real,int imag):real(real),imag(imag){
}
MyComplex::~MyComplex(){
}
MyComplex::MyComplex(const MyComplex& other){
real=other.real;
imag=other.imag;
}
MyComplex& MyComplex::operator=(const MyComplex& other){
real = other.real;
imag = other.imag;
return *this;
}
MyComplex MyComplex::operator+(const MyComplex& other){
MyComplex result(*this);
result.real+=other.real;
result.imag+=other.imag;
return result;
}
MyComplex MyComplex::operator+=(const MyComplex& other){
real+=other.real;
imag+=other.imag;
return *this;
}
bool MyComplex::operator==(const MyComplex& other){
return real==other.real&&imag==other.imag;
}
bool MyComplex::operator!=(const MyComplex& other){
return !(*this==other);
}
std::ostream& operator<<(std::ostream & os,const MyComplex & com){
os< 0) {
std::cout << "+";
}
std::cout << com.imag << "i";
return os;
}
std::istream& operator>>(std::istream & is,MyComplex & com){
std::cout<<"请输入实数部分:";
is>>com.real;
if(is)
{
std::cout<< "请输入虚数部分:" ;
is>>com.imag;
if(is)
{
return is;
}
else
{
com = MyComplex();
}
}
else
{
com = MyComplex();
}
return is;
}
void MyComplex::SetReal(int real){
this->real = real;
}
void MyComplex::SetImag(int imag){
this->imag = imag;
}
void MyComplex::SetVal(int real,int imag){
this->real = real;
this->imag = imag;
}
inline int MyComplex::GetReal() const{
return this->real;
}
inline int MyComplex::GetImag() const{
return this->imag;
}
int _tmain(int argc, _TCHAR* argv[])
{
MyComplex c1(1,2);
cout<<"c1:"<>c1;
cin>>c2;
cout<