/**vector容器*/
/*2015.05.25 23:06 第一次整理*/
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
typedef struct Student
{
int ID;
string name;
}struA;
int main()
{
//构造
int nSize = 4;
int i;
const int &t = 9;//整型变量也行
vector <int> vecIntA(nSize,t);//元素个数为4且每个元素都为9
vector <struA> vecStruA(nSize);
vector <int> vecIntB(vecIntA);//vecIntA复制到vecIntB(深复制?)
vector <int> vecIntC;//创建一个空的vector,加括号与不加括号的区别?
int arr[] = {1,2,3,4,5};
vector <int> vecIntD(arr,arr + 4);//这个函数只能用于构造容器,前闭后开,5没有复制进去
/**for(int i = 0;i < 5;i++)//容器中只有四个元素
cout << vecIntD[i] << endl;*/
//定位、遍历
int n = vecIntD.at(2);//返回位置为2的元素的引用
/**cout << "value:" << n << endl;//输出3*/
n = vecIntD.front();//返回首元素的引用
/**cout << "front value: "<< n << endl;//输出1*/
n = vecIntD.back();//返回尾元素的引用
/**cout << "back value:" << n << endl;//输出4*/
/*迭代器的使用同MAP*/
/*除迭代器外,还可用下标像数组一样遍历*/
///大小
int Size;
Size = vecIntA.size();
/*cout << "size:" << Size <<endl;*/
Size = vecIntA.capacity();//返回当前vector能容纳的最大元素个数
/**cout << "capacity:" << Size << endl;//输出4*/
Size = vecIntA.max_size();//返回最大可允许的元素个数
/*cout << "max_size:" << Size << endl;*/
//删除,清空,判空
vector <int>::iterator vecIte;
for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)
{
vecIntA.erase(vecIte);//删除迭代器指向元素
}
/**cout << vecIntA.size() << endl;//输出2,会剩余两个元素,删除元素后因为会重置begin()位置,所以迭代器位置会变化,所以删不干净*/
/*for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)
{
cout << *vecIte << endl;
}*/
vecIntA.erase(vecIntA.begin(),vecIntA.begin() + 1);//删除第1个到第2个之间的元素,前闭后开,所以第二个没有删除
/**for(vecIte = vecIntA.begin();vecIte != vecIntA.end();++vecIte)
{
cout << *vecIte << endl;
}//输出一个9*/
vecIntA.pop_back();//删除最后一个元素
if(vecIntA.empty())
{
/*cout << "empty!" << endl;*/
}
else
{
/*cout << "not empty!" << endl;*/
}
/**for(vecIte = vecIntB.begin();vecIte != vecIntB.end();++vecIte)
{
cout << *vecIte << endl;
}//有元素输出,所以是深复制*/
vecIntB.clear();
vecIntC.clear();
/**if(vecIntC.empty())
{
cout << "empty" << endl;
}*/
vecIntD.clear();
vecStruA.clear();
///插入
vecIntA.push_back(1);
vecIntA.push_back(2);
vecIntA.push_back(3);
vecIntA.push_back(4);//向尾部插入元素
/*for(i = 0;i < 4;i++)
{
cout << vecIntA.at(i) << endl;
}*/
vecIte = vecIntA.begin() + 2;
const int &m = 6;
vecIntA.insert(vecIte,m);//向迭代器指向的元素前插入元素m
/*for(i = 0;i < vecIntA.size();i++)
{
cout << vecIntA[i]<< endl;
}//1,2,6,3,4*/
n = 3;
vecIte = vecIntA.begin() + 1;//插入元素后迭代器必须要更新?
vecIntA.insert(vecIte,n,m);//向迭代器指向的元素前插入n个相同的元素m
/**for(i = 0;i < vecIntA.size();i++)
{
cout << vecIntA[i]<< endl;
}//1,6,6,6,2,6,3,4*/
vecIntB.push_back(5);
vecIntB.push_back(7);
vector <int>::const_iterator first,last;
first = vecIntA.begin() + 1;
last = vecIntA.end();
vecIntB.insert(vecIntB.begin(),first,last);
//在迭代器所指向的位置请前插入同类型向量【first,last)之间的数据,前闭后开区间,last元素不插入,注意后面两个形参为常迭代器
/**for(i = 0;i < vecIntB.size();i++)
{
cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;
}*/
///其他函数
vecIntB.assign(first,last);//向量中[first,last)中元素设置成当前向量元素,类似于copy函数
for(i = 0;i <vecIntB.size();i++)
{
cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;
}
vecIntA.assign(4,100);//设置4个元素的值为100
/**for(i = 0;i <vecIntA.size();i++)
{
cout << "vecIntA[" << i << "]:" << vecIntA[i] << endl;
}//输出100,100,100,100*/
vecIntB.swap(vecIntA);//交换两个同类型向量的数据
/**for(i = 0;i <vecIntB.size();i++)
{
cout << "vecIntB[" << i << "]:" << vecIntB[i] << endl;
}*/
return 0;
}
STL Vector整理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.