一、vector向量容器
簡介:
Vector向量容器可以簡單的理解為一個數組,它的下標也是從0開始的,使用時可以不用確定大小,但是它可以對于元素的插入和刪除,可以進行動態調整所占用的內存空間,它里面有很多系統已經定義好了的函數方法,可以直接調用進行插入元素與在尾部擴張元素…
函數方法總結:
1,尾部元素擴張 push_back()
2,返回首元素位置的迭代器 begin();
3,返回最后一個元素的下一元素位置的迭代器 end();
4,元素的插入 insert();
5,元素的刪除
?刪除vector中迭代器所指的一個元素或一段區間中的所有元素 erase();
?一次性刪除vector中的所有元素 clear();
6,反向排列reverse
7,sort()對向量元素排序
8,反向排序(使用時需要在頭文件進行聲明#include < algorithm >) reverse();
9,對向量元素進行排序(默認為升序排列)(使用時需要在頭文件進行聲明#include < algorithm >) sort();
10,向量大小size();
11,判斷向量是否為空empty();
Vector向量容器的用法:
①使用Vector向量容器,需要在頭文件聲明 #include< vector >
②創建vector對象的三種形式
ⅰ vector< int >v; //存儲整形的容器v
ⅱ vector< double >v(10); //存儲10個double類型的向量容器,這里的每一個元素都為0
ⅲ vector< double >v(10,12.02); //存儲10個double類型的向量容器, 每個值都為12.02
③使用迭代器進行遍歷
vector::iterator it; //定義迭代器變量it
for(it=v.begin();it!=v.end();it++) //從首元素到最后一個元素的下一個元素位置結束
{
cout << *it << endl;//將這10個double類型的元素輸出出來
}
1,for循環遍歷訪問vector元素
#include <iostream>
#include<vector>
using namespace std; //因為C++STL泛型都是定義在std命名空間中,所以,必須在頭文件聲明的最后一句加上這一行int main()
{vector<double> v (10,14.12);//定義一個存儲10個double類型元素的向量容器,其中的每一個元素都為14.12v[5]=10.14; //對v[5]進行重新賦值v[9]=78.10; //對v[9]進行重新賦值for(int i=0;i<10;i++){cout << v[i] << endl;//將這10個double類型的元素輸出出來}return 0;
}
2,用迭代器訪問vector元素
#include <iostream>
#include<vector>
using namespace std;int main()
{vector<double> v (10,14.12);//定義一個存儲10個double類型元素的向量容器,其中的每一個元素都為14.12v[5]=10.14; //對v[5]進行重新賦值v[9]=78.10;//對v[9]進行重新賦值vector<double>::iterator it; //定義迭代器變量itfor(it=v.begin();it!=v.end();it++) //從首元素到最后一個元素的下一個元素位置結束{cout << *it << endl;//將這10個double類型的元素輸出出來}return 0;
}//這里我有個疑問,最后輸出的v[9],是78.1,而不是78.10。我也不知道為啥~~~
3,一些函數方法的使用
#include <iostream>
#include<vector>
using namespace std;int main()
{vector<double> v (10,14.12);//定義一個存儲10個double類型元素的向量容器,其中的每一個元素都為14.12v[5]=10.14; //對v[5]進行重新賦值v[9]=78.10;//對v[9]進行重新賦值vector<double>::iterator it; //定義迭代器變量itfor(it=v.begin();it!=v.end();it++) //從首元素到最后一個元素的下一個元素位置結束{cout << *it << endl;//將這10個double類型的元素輸出出來}cout<<endl;v.push_back(2);//將2這個元素從尾部添加到v向量容器中去v.push_back(5);//將5這個元素從尾部添加到v向量容器中去v.insert(v.begin(),8);//在v向量容器的最前面加入一個新元素8v.insert(v.begin()+2,1);//在第二個元素前插入新元素1v.insert(v.end(),3);//在v向量容器末尾追加新元素3for(it=v.begin();it!=v.end();it++) //從首元素到最后一個元素的下一個元素位置結束{cout << *it << endl;//將這10個double類型的元素輸出出來}cout<<endl;v.erase(v.begin()+1,v.begin()+5); //元素從0開始計數,將下標為1到5元素給刪除掉[1,5)for(it=v.begin();it!=v.end();it++){cout<<*it<<endl;}cout<<endl;v.clear(); //將v這個向量容器給清空cout<<v.size()<<endl; //輸出v這個向量容器的大小return 0;
}
4,reverse反向排序算法
#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;int main()
{vector<int>v(10,1); //定義一個整形的大小為10個元素且均為1的v向量容器vector<int>::iterator it; //定義迭代器變量itfor(int i=0;i<10;i++) //將v向量容器進行重新賦值9~0;{v[i]=i;}reverse(v.begin(),v.end()); //反向排列向量的從首到尾之間的元素for(it=v.begin();it!=v.end();it++) //遍歷輸出v向量容器{cout<<*it<<" ";}cout<<endl;return 0;
}
5,對向量容器元素排序(默認排序為升序) sort();
#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;
//C++ const 允許指定一個語義約束,編譯器會強制實施這個約束,允許程序員告訴編譯器某值是保持不變的。如果在編程中確實有某個值保持不變,就應該明確使用const,這樣可以獲得編譯器的幫助。
bool beyond(const int &a,const int &b)//自己定義比較函數,要求由大到小排序
{if(a!=b)return a>b; //如果a,b不相等的話返回a和b之間的最大值else return a<b; //否則返回a和b之間的最小值
}int main()
{vector<int>v(10,1); //定義一個整形的大小為10個元素且均為1的v向量容器vector<int>::iterator it; //定義迭代器變量itfor(int i=0;i<10;i++) //將v向量容器進行重新賦值9~0;{v[i]=i;}sort(v.begin(),v.end()); //sort函數方法默認情況下對向量容器進行升序排列for(int j=0;j<10;j++){cout<<v[j]<<" ";}cout<<endl;sort(v.begin(),v.end(),beyond); //自己定義sort()排序方式for(int k=0;k<10;k++){cout<<v[k]<<" ";}cout<<endl;return 0;
}