C++中vector的使用

C++中的Vector使用

vector是c++标准库中定义的类型,是容器的一种。标准库中容器有很多种,vector只是最基本的一种,vector类型和数组类型的基本功能都是一样的,就是存储同类元素,但是他与数组最大的区别就是可以实现动态存储,举个例子来说:
#include<iostream>
#include<string>

using namespace std;

int main
{
   vector<string> text;//定义string的容器,这时候该容器是空的.。
                       //翻译为容器非常形象吧,呵呵!
   string word;        //定义字符串变量
   while(cin>>word)
   text.push_back(word)//每输入一串字符,就将他装入我们定义的容器
   //为了验证我们的结论,我们看看输出结果,当然vector类型可以像数
   //数组一样用下标输出,不过这不是一个好办法
   //输出容器中的数据我们一般使用迭代器,代码如下;
   while(cin>>word)
{
text.push_back(word);
     for(vector<string>::iterator i=text.begin();i!=text.end();i++)
{
   cout<<*i;
}
}
     return 0;   
}
可以实验一下,运行后随便输入些字符按回车,可以发现使用容器的妙处。其实要讲清楚容器一两句可不行,这段代码只是一个小小的体验。


另外补充两点:
1、如果是用vc6.0进行编译,会出现四个warning不管它,这是因为vc6.0对c++标准库的支持不是很好
2、如果想多学点这方面的知识,建议阅读c++ primer!

用Vector操作队列范例: queue.h
#pragma once

#include <vector>
using namespace std;

namespace NS_GXX
{
template<class Ty>
class CQueue
{
public:
typedef typename vector<Ty>::iterator queue_iterator;
typedef typename vector<Ty>::reverse_iterator queue_reverse_iterator;
typedef typename vector<Ty>::size_type size_type;
//进队
virtual void enqueue(const Ty& elem)
{
   m_queue.push_back(elem);
}
//出队
Ty dequeue()
{
   queue_iterator it = m_queue.begin();
   Ty rsElem = *it;
   m_queue.erase(it);
   return rsElem;
}
//插队
void insert(size_type pos,const Ty& elem)
{
   queue_iterator it = m_queue.begin();
   it += pos;
   m_queue.insert(it,elem);
}
void clear()
{
   m_queue.clear();
}

size_type size()
{
   return m_queue.size();
}

queue_iterator begin()
{
   return m_queue.begin();
}

queue_iterator end()
{
   return m_queue.end();
}

queue_reverse_iterator rbegin()
{
   return m_queue.rbegin();
}

queue_reverse_iterator rend()
{
   return m_queue.rend();
}

Ty at(size_type pos )
{
   return m_queue.at(pos);
}

private:
vector<Ty> m_queue;
};

}
test.cpp mian()文件:
#include "queue.h"

#include <iostream>
#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
NS_GXX::CQueue<int> Q1;

Q1.enqueue(10);
Q1.enqueue(11);
Q1.enqueue(12);
Q1.enqueue(13);

NS_GXX::CQueue<int>::queue_iterator it;
it = Q1.begin();
for(; it != Q1.end() ; it ++ )
{
   cout<<*it<<" ";
}
cout<<endl;

Q1.dequeue();
it = Q1.begin();
for(; it != Q1.end() ; it ++ )
{
   cout<<*it<<" ";
}
cout<<endl;

Q1.dequeue();
it = Q1.begin();
for(; it != Q1.end() ; it ++ )
{
   cout<<*it<<" ";
}
cout<<endl;

NS_GXX::CQueue<string> Q2;
NS_GXX::CQueue<string>::queue_iterator it2;

Q2.enqueue( "星期一" );
Q2.enqueue( "星期二" );
Q2.enqueue( "星期三" );
Q2.enqueue( "星期四" );
Q2.enqueue( "星期五" );
Q2.enqueue( "星期六" );
Q2.enqueue( "星期日" );

it2 = Q2.begin();
for(; it2 != Q2.end() ; it2 ++ )
{
   cout<<*it2<<" ";
}
cout<<endl;

NS_GXX::CQueue<string>::queue_reverse_iterator it3;
it3 = Q2.rbegin();//反向输出
for(; it3 != Q2.rend() ; it3 ++ )
{
   cout<<*it3<<" ";
}
cout<<endl;

getchar();
return 0;
}

 

posted @ 2012-11-05 14:55  perfectlly  阅读(126)  评论(0)    收藏  举报