英魂之刃吕布:STL vector用法

来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 09:37:10

#include
#include
#include
#include
using namespace std;
typedef vector INTVECTOR;

int main(void)
{
vector num;   // STL中的vector容器
int element;

// 从标准输入设备读入整数,
// 直到输入的是非整型数据为止
while (cin >> element)     //ctrl+Z 结束输入
   num.push_back(element);

// STL中的排序算法
sort(num.begin(), num.end());

// 将排序结果输出到标准输出设备
for (int i = 0; i < num.size(); i ++)
   cout << num[i] << " ";
cout<    //vec1对象初始为空
    INTVECTOR vec1;  
    //vec2对象最初有10个值为6的元素
    INTVECTOR vec2(10,6);
    //vec3对象最初有3个值为6的元素
    INTVECTOR vec3(vec2.begin(),vec2.begin()+3);

    //声明一个名为i的双向迭代器
    INTVECTOR::iterator i;

    //从前向后显示vec1中的数据
    cout<<"vec1.begin()--vec1.end():"<    for (i =vec1.begin(); i !=vec1.end(); ++i)
        cout << *i << " ";
    cout << endl;

    //从前向后显示vec2中的数据
    cout<<"vec2.begin()--vec2.end():"<    for (i =vec2.begin(); i !=vec2.end(); ++i)
        cout << *i << " ";
    cout << endl;

    //从前向后显示vec3中的数据
    cout<<"vec3.begin()--vec3.end():"<    for (i =vec3.begin(); i !=vec3.end(); ++i)
        cout << *i << " ";
    cout << endl;

    //测试添加和插入成员函数
    vec1.push_back(2);
    vec1.push_back(4);
    vec1.insert(vec1.begin()+1,5); //在第一个位置后插入5
    vec1.insert(vec1.begin()+1,vec3.begin(),vec3.end());//在第一个位置后插入ve3开始到结束的数字
    cout<<"push() and insert():" <    for (i =vec1.begin(); i !=vec1.end(); ++i)
        cout << *i << " ";
    cout << endl;

    //测试赋值成员函数
    vec2.assign(8,1);//重新给vec2赋了8个值1
    cout<<"vec2.assign(8,1):" <    for (i =vec2.begin(); i !=vec2.end(); ++i)
        cout << *i << " ";
    cout << endl;

    //测试引用类函数
    cout<<"vec1.front()="<    cout<<"vec1.back()="<    cout<<"vec1.at(4)="<    cout<<"vec1[4]="<

    //测试移出和删除
    vec1.pop_back();//最高位前移一位(去掉最高位)
    cout<<"vec1.pop_back():" <    for (i =vec1.begin(); i !=vec1.end(); ++i)
        cout << *i << " ";
    cout << endl;
    vec1.erase(vec1.begin()+1,vec1.end()-2);//清除 vec1.begin()+1到vec1.end()-2
    cout<<"vec1.erase():" <    for (i =vec1.begin(); i !=vec1.end(); ++i)
        cout << *i << " ";
    cout << endl;

    //显示序列的状态信息
    cout<<"vec1.capacity(): "<    cout<<"vec1.max_size(): "<    cout<<"vec1.size(): "<    cout<<"vec1.empty(): "<

    //vector序列容器的运算
    cout<<"vec1==vec3: "<<(vec1==vec3)<    cout<<"vec1<=vec3: "<<(vec1<=vec3)<   system("pause");
   return 0;
}*
    Vector: 它就是数组的一个泛化推广, 等同于数组,它拥有一段连续的内存空间,并且起始地址不变,
优点:1)很好的支持随机存取,即[]操作符,查询操作高效
缺点:1)插入/删除会造成内存块的拷贝,效率较低,(尾部元素除外)
    2)内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝,大大影响了vector的效率
*/
#include 
#include 
#include 

using namespace std;

void printVector(vector v1)
{
//使用下标方式
//for (unsigned int i = 0; i < v1.size(); i++)
//{
// cout<<"v1["<//}

//使用迭代器
//vector::iterator iter;
//for (iter = v1.begin(); iter != v1.end(); iter++)
//{
// //cout<<"v1["<// cout<<"v1["<//}
//cout<
//使用迭代器指针
//vector::iterator *pIter; //Error,迭代器指针需要分配内存才能使用,
             //或者通俗的说pIter未实现时,*pIter是不确定的,运行时对其赋值必须会发生异常
vector::iterator *pIter = new vector::iterator; 
if(NULL == pIter)
{
   return;
}
for(*pIter = v1.begin(); *pIter != v1.end(); (*pIter)++) //此处若写成*pIter++是不对的,因为++优化级别较高
{
   cout<<**pIter<<", ";
}
if (NULL != pIter)
{
   delete pIter;
   pIter = NULL;
}
cout<}

void reversePrintVector(vector vec)
{
vector::reverse_iterator revIter;
for (revIter = vec.rbegin(); revIter != vec.rend(); revIter++)
{
   cout<<"v["<}
cout<}
int main()
{
//创建
vector v1; //创建空的vector对象
vector v2(10); //创建具有10个元素的vector对象
vector v3(10, 9.1); //创建具有10个元素的vector对象,每个元素的值为9.1
vector v4(v3); //通过拷贝一个V3对象的各个元素值,创建一个新的vector对象
int iArray[] = {11, 13 , 19, 23, 27};
vector v(iArray, iArray + 5);//通过拷贝迭代器区间[first, end)的元素值,创建新的vector对象

//初始化----用push_back,在容器的尾端插入新元素
v1.push_back(3);
v1.push_back(10);
v1.push_back(19);

//遍历访问:1-下标方式(略)
//遍历访问之2:迭代器方式, 建议使用此方式并熟练应用之
cout<<"printVector(v1): "<printVector(v1);

//反向遍历之迭代器方式
cout<<"reversePrintVector(v1):"<reversePrintVector(v1);

//插入元素:用insert(&pos, elem)
cout<<"v1.insert(v1.begin() + 1, 100): "<v1.insert(v1.begin() + 1, 100);
printVector(v1);

//删除元素: 尾部元素删除用pop_back();单个元素删除用erase(&pos);
//[first, last)区间元素删除用erase(&first, &last); 整体删除用clear();
cout<<"v1.erase(v1.begin() + 1): "<v1.erase(v1.begin() + 1);
printVector(v1);
cout<<"v1.pop_back():"<v1.pop_back();
printVector(v1);

//查找函数:由外部算法提供
vector::iterator iter;
cout<<"find(v1.begin(), v1.end(), 2) = "<iter = find(v1.begin(), v1.end(), 10);
if (iter != v1.end())
   cout<<"find "<<*iter<<" at index: "<else
   cout<<"not find"<
cout<<"v1.empty() = "<cout<<"其它:\nv1.empty() = "<cout<<"head-elem="<cout<<"tail-elem="<
//清空
cout<<"v1.clear() "<v1.clear();
cout<<"v1.size() = "<}


/**/////////////////////////////////////运行结果////////////////////////////////////////////////////////
printVector(v1):
3, 10, 19,
reversePrintVector(v1):
v[0]=19, v[1]=10, v[2]=3,
v1.insert(v1.begin() + 1, 100):
3, 100, 10, 19,
v1.erase(v1.begin() + 1):
3, 10, 19,
v1.pop_back():
3, 10,
find(v1.begin(), v1.end(), 2) =
find 10 at index: 1
v1.empty() = 0
其它:
v1.empty() = 0, v1.size() = 2, v1.max_size() =(hex)3fffffff
head-elem=3
tail-elem=10
v1.clear()
v1.size() = 0, v1.empty()=1