#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(){
//vector的定義和初始化
cout << "\n定義和初始化vector:--------->" << endl;
vector<int> v1;//定義一個空的vector,執行默認初始化
vector<int> v2(v1);//定義一個拷貝v1的副本
//指定數量的初始化
vector<string> v3(3, "str");//定義一個初始含有3個“str”字符串的vector
vector<int> v4(10);//定義初始含有10個默認初始化的vector(對於int,默認初始化全爲0,對於string,全爲空字符串)
//用初始化列表進行初始化,注意是{ }而不是( ),前者用於列表初始化,後者用於提供構造信息,如v3和v4
vector<int> v5{ 1, 2, 3, 4, 5 };//定義一個被自定義初始化的vector
vector<int> v6 ={ 1, 2, 3 };//等價於v5
//使用assign()爲vector賦值(注意不是添加,而是覆蓋)
v1.assign(v5.begin(), v5.end() - 2);//將v5的開始到倒數第三個元素拷貝給v1
v1.assign(4, 3);//使用4個3爲v1賦值
//使用back()獲取vector的最後一個元素
cout <<"\n使用back()獲取vector的最後一個元素:"<< v1.back() << endl;
//使用front()獲取vector的第一個元素
cout <<"\n使用front()獲取vector的第一個元素:"<< v1.front() << endl;
//使用insert()向vector中插入元素(是插入,不是覆蓋,也不是替換,元素將後移)
v1.insert(v1.begin(), 5);//在開始位置插入元素5
v1.insert(v1.begin()+1, 3, 5);//在第一號開始插入3個5
int arr[5] = { 1, 2, 3, 4, 5 };
v1.insert(v1.begin(), arr + 1, arr + 3);//將數組b的第1和第2個元素插入到開始位置
//使用push_back()添加元素到vector末尾,vector能高效管理內存,所以在定義時指定大小(v3,v4)是沒有必要的。
cout << "\n使用push_back()添加元素到vector末尾--------------->" << endl;
int a;
//cin返回爲輸入流,當輸入流爲無效(如需要int輸入string時,vs測試是直接退出程序,無任何提示)
//或輸入文件結束符EOF(windows下爲ctrl+z,類unix下爲ctrl+d)結束
//while (cin >> a){
// v1.push_back(a);
//}
v1 = { 1, 2, 4, 5, 6, 5 };
//使用empty()判斷vector是否爲空
cout << "\n判斷vector是否爲空----------------->" << endl;
if (v1.empty()){
cout << "v1 is empty!" << endl;
}
else{
cout << "v1 is not empty!" << endl;
}
//使用size()返回vector元素個數
cout << "\nnumber of v1 is:" << v1.size() << endl;
//使用resize()來重新定義vector大小
v1.resize(20);//原來元素多則刪,少則補隨機值
v1.resize(20, 2);//原來元素多則刪,少則補2
//使用下標運算符[ ]訪問指定位置的元素(返回元素的引用,故只要元素不是常量,就可以用下標來對元素進行賦值操作,
//但下標不能用於添加新元素)
cout << "\n使用下標[0]訪問指定位置的元素--------------->" << endl;
cout << v1[0] << endl;
//使用=拷貝替換,也可以理解爲賦值,整個vector全部替換,包括size等信息
v2 = v5;
cout << "\n使用=拷貝替換後的v2------------->" << endl;
for (int i = 0; i < v2.size(); i++){
cout << v2[i] << " ";
}
//使用列表{ }來拷貝替換
v2 = { 2, 3, 4 };
cout << "\n使用列表{ }來拷貝替換後的v2------------->" << endl;
for (int i = 0; i < v2.size(); i++){
cout << v2[i] << " ";
}
//使用==判斷兩vector相等,當且僅當對應元素都相等時爲真
//!=同理
cout << "\n使用==判斷兩vector相等-------------->" << endl;
if (v1 == v2){
cout << "v1 = v2!" << endl;
}
else{
cout << "v1 != v2!" << endl;
}
//使用關係運算符(>,<,>=,<=)判斷兩個vector大小
//按字典順序進行比較
cout << "\n使用關係運算符判斷兩個vector大小---------->" << endl;
if (v1 > v2){
cout << "v1 > v2" << endl;
}
//使用範圍for來訪問vector中的元素
cout << "\n使用範圍for來訪問vector中的元素----------->" << endl;
for (auto &i : v2){ //i爲元素的引用,這樣可以通過i來修改v2的元素
i *= i;
}
for (auto i : v2){ //只讀,不能修改
cout << i << " ";
}
//使用迭代器(與指針類似)
//使用begin()返回表示第一個元素的迭代器
cout << "\n使用begin()返回表示第一個元素的迭代器----------->" << endl;
auto b = v1.begin();
cout << *b << endl;
//使用end()返回指向尾元素之後的位置的迭代器(尾後迭代器)
//當vector爲空時,begin()和end()都返回尾後迭代器
cout << "\n使用end()返回指向尾元素之後的位置的迭代器----------->" << endl;
auto e = v1.end();
cout << *(e-1) << endl;//訪問*e將會出錯
//迭代器運算
cout <<"返回迭代器所指的元素的引用:"<< *b << endl;
//iter->mem,返回iter所指的元素(類,結構體等)mem成員
//cout << "返回上一個元素:" << *(--e) << endl;
//cout << "返回下一個元素:" << *(++b) << endl;
//==和!=分別用於判斷兩個迭代器是否相等
//一個綜合的例子:
cout << "\n一個綜合的例子:-------->" << endl;
for (auto it = v1.begin(); it != v1.end(); it++){
cout << *it << " ";
}
//迭代器類型,前面我們獲取的迭代器類型都是用auto自動推算的,也可以手動添加
cout << "\n定義讀寫義迭代器:------------>" << endl;
for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++){
cout << *it << " ";
*it += 1;
}
//如果vector中的元素是一個常量,則只能使用const_iterator
//若vector中元素是常量,則begin()和end()返回只讀迭代器,
//也可以使用cbegin()和cend()來返回非常量元素容器的只讀迭代器
vector<const int> v7 = { 1, 2, 3, 4, 5 };
cout << "\n定義只讀(const)義迭代器:------------>" << endl;
for (vector<const int>::const_iterator it = v7.cbegin(); it != v7.cend(); it++){
cout << *it << " ";
}
//使用解引用符號獲取迭代器所指元素
cout << "\n使用解引用符號獲取迭代器所指元素:" << *(v1.begin()) << endl;
//對於元素是類或者結構體的容器,可以使用解引用和.訪問成員,
//也可以直接使用箭頭運算符->訪問成員(和指針一樣一樣的)
//
//可以使用+、-、+=、-=一個整數值來是迭代器跳過一些元素
//可以將兩個迭代器相減得到兩迭代器之間的差值
//可以使用>、>、=<、<=來比較兩個迭代器的大小
//使用pop_back()來刪除vector的尾元素
v1.pop_back();
//使用erase()來刪除元素
v1.erase(v1.begin(), v1.begin() + 5);//刪除開始到begin()+5之前那個元素,不包括後者
//使用clear()來清空vector
v1.clear();
//使用{}來將數組中的元素全部初始化爲0,不初始化則全爲隨機值
int arr1[12]{};
for (auto i : arr1){//可以使用範圍for循環訪問數組
cout << i << " ";
}
system("pause");
return 0;
}
【c++】use vector
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.