/**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整理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.