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中。可以看成是有两个成员变量firstsecond的结构体,并且重载了<运算符(先比较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,其成员firstsecond分别对应映射的keyvalue

->运算符来获取值,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();

返回对栈顶元素的引用。

 posted on 2020-09-08 09:53  _STITCH  阅读(171)  评论(0编辑  收藏  举报