C++ 栈和队列 Vector

原帖 http://blog.csdn.net/zhy_cheng/article/details/8090346

使用标准库的栈和队列时,先包含相关的头文件

#include

#include

定义栈如下:

stack stk;

定义队列如下:

queue q;

栈提供了如下的操作

[cpp]  view plain copy
  1. s.empty()               如果栈为空返回true,否则返回false  
  2. s.size()                返回栈中元素的个数  
  3. s.pop()                 删除栈顶元素但不返回其值  
  4. s.top()                 返回栈顶的元素,但不删除该元素  
  5. s.push()                在栈顶压入新元素  


队列提供了下面的操作

[cpp]  view plain copy
  1. q.empty()               如果队列为空返回true,否则返回false  
  2. q.size()                返回队列中元素的个数  
  3. q.pop()                 删除队列首元素但不返回其值  
  4. q.front()               返回队首元素的值,但不删除该元素  
  5. q.push()                在队尾压入新元素  
  6. q.back()                返回队列尾元素的值,但不删除该元素  

vector

  1.C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和 >. 
v[]        // 要访问vector中的某特定位置的元素可以使用 [] 操作符.
        v1 == v2    // 两个vectors被认为是相等的,如果: 1.它们具有相同的容量;2.所有相同位置的元素相等.
v1 != v2
v1 <= v2    // vectors之间大小的比较是按照词典规则.
v1 >= v2 
v1 < v2
v1 > v2 

(1)头文件#include.
(2)创建vector对象,vector vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout< (5)使用迭代器访问元素.
(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();


#include 
#include 
#include 
int main( )
{
	using namespace std;
	vector  v1;
	vector ::iterator Iter1; 
	for (int  i = 0 ; i <= 5 ; i++ )
	{
		v1.push_back( i );
	}
	v1.insert(v1.begin()+2,22);//在2的位置上插入元素
	v1.erase(v1.begin()+2);//删除在2的位置上的元素
	v1.pop_back();//删除最后的元素
	reverse(v1.begin(),v1.end());//翻转  使用reverse将元素翻转:需要头文件#include
	cout << "vector v1 = ( " ;
	for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
		cout << *Iter1 << " ";
	cout << ")" << endl;

	return 1;
}

向量(vector)、双端队列(deque)、列表(list)、集合(set)、多重集合(multiset)、映射(map)和多重映射(multimap)
multimap允许重复元素,map不允许重复元素。

//deque
http://www.cplusplus.com/reference/deque/deque/
Modifiers:
assign
Assign container content (public member function )
push_back
Add element at the end (public member function )
push_front
Insert element at beginning (public member function )
pop_back
Delete last element (public member function )
pop_front
Delete first element (public member function )
insert
Insert elements (public member function )
erase
Erase elements (public member function )
swap
Swap content (public member function )
clear
Clear content (public member function )
emplace 
Construct and insert element (public member function )
emplace_front 
Construct and insert element at beginning (public member function )
emplace_back 
Construct and insert element at the end (public member function )



//set 用法
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。
平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
构造set集合主要目的是为了快速检索,不可直接去修改键值。

 C++ Set常用用法
分类: CPlus 2013-04-22 19:24 4525人阅读 评论(0) 收藏 举报
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。
平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
构造set集合主要目的是为了快速检索,不可直接去修改键值。

常用操作:
1.元素插入:insert()
2.中序遍历:类似vector遍历(用迭代器)
3.反向遍历:利用反向迭代器reverse_iterator。
    例:
    set s;
    ......
    set::reverse_iterator rit;
    for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
            set s;
            s.erase(2);        //删除键值为2的元素
            s.clear();
5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
            set s;
            set::iterator it;
            it=s.find(5);    //查找键值为5的元素
            if(it!=s.end())    //找到
                cout<<*it<0;
            }
        }
        sets;
        ......
        set::iterator it;
    (2)如果元素是结构体,可以直接将比较函数写在结构体内。
        例:
        struct Info
        {
            string name;
            float score;
            //重载“<”操作符,自定义排序规则
            bool operator < (const Info &a) const
            {
                //按score从大到小排列
                return a.score s;
        ......
        set::iterator it;
		


//map
* Map的特点: 1、存储Key-value对
* 2、支持快速查找,查找的复杂度基本是Log(N)
* 3、快速插入,快速删除,快速修改记
#include 
#include 
#include  
using namespace std;


int main()
{
	map m;
	m["a"]=1;
	m["b"]=6;
	m["c"]=9;
	map::iterator it;
	it=m.begin();
	const char* c =it->first;
	cout<<"first element is :"<first<<";"<second<




你可能感兴趣的:(C++)