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;
}

浙公网安备 33010602011771号