STL 之vector學習 (最詳細的整理)
vector是一種可以儲存任意型別的動態陣列,屬於序列式容器,可以用sort對其進行排序,底層資料結構是陣列,可以隨機訪問元素。
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
vector<int> a,b;
int i,j,k,t,n,m;
//插入vector
vector<int>::iterator id=a.begin()-1;
for(i=1;i<11;i++)
{
a.push_back(i);
b.push_back(i);
}
//遍歷動態陣列
for(i=0;i<10;i++) // 最普通的遍歷
cout<<a[i]<<" ";
cout<<endl;
cout<<"用迭代器,begin"<<endl;
vector<int>::iterator it=a.begin(); // 用迭代器遍歷
for(;it!=a.end();it++)
cout<<*it<<" ";
cout<<endl;
cout<<"用迭代器:rend"<<endl;
vector<int>::reverse_iterator iq=a.rend()-1; //書上說rend相當於begin前一個位置,按書上的說的來敲,iq應該是++,但我一++,他就崩潰,搜了下網上的都是--,
for(;iq!=a.rbegin()-1;iq--) //疑惑,看來不能完全照書敲,實踐出真知。
cout<<*iq<<" ";
cout<<endl;
cout<<"用迭代器:rbegin"<<endl;
vector<int>::reverse_iterator ir=a.rbegin(); // 這個倒是和書上說的一樣。
for(;ir!=a.rend();ir++) //
cout<<*ir<<" ";
cout<<endl;
cout<<"a.front:"<<a.front()<<endl; //訪問首元素和尾元素
cout<<"a.back:"<<a.back()<<endl;
cout<<"a[5]:"<<a.at(5)<<endl; // 訪問指定元素
//動態陣列的大小
cout<<"a.size:"<<a.size()<<endl;
cout<<"a.max_size:"<<a.max_size()<<endl;
cout<<"a.capacity:"<<a.capacity()<<endl; //這個動態陣列所能容納的最大容量
a.resize(15);// 改變a的大小
cout<<"change the size of a:"<<a.size()<<endl;
//動態陣列的交換
a.swap(b);
cout<<"swap a and b"<<endl;
cout<<"a:";
for(i=0;i!=a.size();i++)
cout<<a[i]<<" ";
cout<<endl;
cout<<"b:";
for(i=0;i!=b.size();i++)
cout<<b[i]<<" ";
cout<<endl;
//對動態陣列指定位置進行賦值
//a.assign(4,999); //
//
cout<<"a[4]:"<<a[3]<<endl;
//a.assign(*(a.begin()),8888);//發現一個bug,我如果把此句的前一句放到此句後面,兩個輸出都為8888
cout<<"a[0]:"<<*(a.begin())<<endl;//對於bug這個我無法解釋
//如圖
a.reserve(36); //reserve就是改變記憶體分給a的大小,不試不知道,一試嚇一跳,如果你被改的值大於a的size,可以改變,若小於a的size,則不可以改變。
for(i=0;i!=a.size();i++)
cout<<a[i]<<" ";
cout<<endl;
cout<<"a.max_size:"<<a.capacity()<<endl;
如果換為這句,就成了下圖
a.reserve(8);
//
a.erase(a.begin());//
a.pop_back();//
a.clear(); //
cout<<a.size()<<endl;
return 0;
}
正確的結果: