vector
头文件<vector>
可变数组,类似数组。
构造方法
vector();
//构造一个空的vector
例 : vector<int> a;
vector( size_type num, const TYPE &val );
//构造一个初始放入num个值为val的元素的vector
例 : vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的vector
vector( const vector &from );
//构造一个与vector from 相同的vector
vector( input_iterator start, input_iterator end );
//构造一个初始值为[start,end)区间元素的vector(注:半开区间).
常用方法
push_back()
void push_back( const TYPE &val );
添加值为val的元素到当前vector末尾。
pop_back()
void pop_back();
删除当前vector最末的一个元素。
clear()
void clear();
删除当前vector中的所有元素。
注:不释放内存,若要释放内存,请用vector<ElementType>().swap(vec);
size()
size_type size();
size() 函数返回当前vector所容纳元素的数目。
empty()
bool empty();
如果当前vector没有容纳任何元素,则empty()函数返回true,否则返回false。
修改元素
用=赋值即可。
vec[i] = x;
把 vec 里下标为 i 的元素的值修改为 x.
二维vector
vector<vector<int> > vec2;
一维一维地赋值
注:<int> >
中的空格不可省略;
set
头文件<set>
集合,其中元素无重复。
构造方法
set();
//构造一个空的set
例 : set<int> a;
set( const set &from );
//构造一个与set from 相同的set
set( input_iterator start, input_iterator end );
//构造一个初始值为[start,end)区间元素的set(注:半开区间).
example
// constructing sets
#include <iostream>
#include <set>
using namespace std;
bool fncomp (int lhs, int rhs) {return lhs<rhs;}
struct classcomp {
bool operator() (const int& lhs, const int& rhs) const
{return lhs<rhs;}
};
int main ()
{
set<int> first; // empty set of ints
int myints[]= {10,20,30,40,50};
set<int> second (myints,myints+5); // pointers used as iterators
set<int> third (second); // a copy of second
set<int> fourth (second.begin(), second.end()); // iterator ctor.
set<int,classcomp> fifth; // class as Compare
bool(*fn_pt)(int,int) = fncomp;
set<int,bool(*)(int,int)> sixth (fn_pt); // function pointer as Compare
return 0;
}
常用方法
insert()
iterator insert( iterator i, const TYPE &val );
//在迭代器i前插入val;
void insert( input_iterator start, input_iterator end );
//将迭代器start开始到end结束返回内的元素插入到集合中;
pair insert( const TYPE &val );
//在当前集合中插入val元素,并返回指向该元素的迭代器和一个布尔值来说明val是否成功的被插入了。
注:插入两个相同的元素是无效的。
count()
size_type count( const key_type &key );
返回当前集合中出现的某个值的元素的数目。
erase()
void erase( iterator i );
//删除i元素;
void erase( iterator start, iterator end );
//删除从start开始到end结束的元素;
size_type erase( const key_type &key );
//删除等于key值的所有元素(返回被删除的元素的个数)。
clear()
void clear();
删除当前vector中的所有元素。
注:会清空内存。
size()
size_type size();
size() 函数返回当前vector所容纳元素的数目。
empty()
bool empty();
如果当前vector没有容纳任何元素,则empty()函数返回true,否则返回false。
find()
iterator find( const key_type &key );
在当前集合中查找等于key值的元素,并返回指向该元素的迭代器;如果没有找到,返回指向集合最后一个元素的迭代器。
遍历
迭代器set<T>::iterator it
for(set<T>::iterator it = s.begin(); it != s.end(); it++){
//遍历操作
}
注: 在C++里遍历set是从小到大排序的,也就是说set会帮我们排序。
map
头文件<map>
映射,由关键字集合(key) 和值集合(value)组成。
构造方法
map();
//构造一个空的set
例 : map<char, int> first;
map( const map &from );
//构造一个与map from 相同的map
例 : map<char, int> second(first);
map( input_iterator start, input_iterator end );
//构造一个初始值为[start,end)区间元素的map(注:半开区间).
例 : map<char, int> third(first.begin(), first.end());
常用函数
insert()
pair insert( const pair &val );
只有在val不存在时插入val。返回值是一个指向被插入元素的迭代器和一个描述是否插入的bool值。
pair
是一个标准库类型,定义在头文件utility
中。可以看成是有两个成员变量first
和second
的结构体,并且重载了<
运算符(先比较first
大小,如果一样再比较second
)。当我们创建一个pair
时,必须提供两个类型。
pair
的定义:pair<string, int> p;
样例:
#include<map>
#include<string>
#include<utility>
using namespace std;
int main(){
map<string, int> dict;
dict.insert(make_pair("Tom", 1));
//make_pair(V1, v2)函数返回由v1和v2初始化的pair,类型可以从v1和v2的值推断出来。
}
注: 如果插入的key
之前已经存在,将不会插入新的value
值代替原来的,即本次插入无效。
count()
size_type count( const KEY_TYPE &key );
count()函数返回map中键值等于key的元素的个数。
如果存在返回1,否则0.
其他与set相似
映射的访问
用[]
来访问。
例:dict[key]
如没有插入该key,则会返回value的对应类型的默认值。
也可以直接用本方法赋值来插入映射。
遍历
使用迭代器遍历,和set差不多。
迭代器定义:map<T1, T2>::iterator it;
迭代器指向的元素是一个pair
,其成员first
和second
分别对应映射的key
和value
。
用->
运算符来获取值,it->first
或(*it).first
.
for(map<T1, T2>::iterator it = dict.begin(); it != dict.end(); it++){
//遍历操作,例:
cout << it->first << " -> " << it->second << endl;
}
注: 在C++里遍历map也是从小到大排序的。
二维
//map套set
map<T1, set<T2> > m1;
//map套map
map<T1, map<T2, T3> > m2;
stack
头文件<stack>
只允许在栈的一端插入或删除元素。(LIFO : Last In First Out)
构造方法
stack<T> s; //空栈
stack<T> s( const Container& ctnr = Container() );
//通过别的容器来构造栈,ctnr可以是deque、vector.
常用函数
push()
void push( const TYPE &val );
将 val 值压栈,使其成为栈顶的第一个元素。
pop()
void pop();
移除堆栈中最顶层元素。
size()
size_type size();
返回当前堆栈中的元素数目。
empty()
bool empty();
如当前堆栈为空,empty() 函数 返回 true 否则返回false.
top()
TYPE &top();
返回对栈顶元素的引用。