C++的vector容器
注: 文章為本人為方便複習而寫,若有朋友要參考,本文的不清楚的地方可以留言,也可以參考其他網頁。
#include<iostream>
#include<vector>
#include<list>
using namespace std;
//容量與實際資料量
void test_one()
{
vector<int> v;
for (int i(0); i < 15; i++)
{
v.push_back(i);
cout << v.capacity() << endl;
}
cout <<"\n" << v.size() << endl;
//vector為類似動態陣列,其容量的分配增長速度不是一個確定值,容量 >= 實際元素個數
}
void printVector(vector<int> v)
{
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
cout << *it << " ";
cout << "\n";
}
//初始化和賦值
void test_two() {
//初始化
vector<int> v1{ 10,2,56,90,1000 };
printVector(v1);
vector<int> v2(v1.begin(), v1.end()); //把v1.begin()到v1.end()之間的資料拷貝給v2
printVector(v2);
int arr[5]{ 1,2,3,4,5 };
vector<int> v3(arr, arr + sizeof(arr) / sizeof(int)); //功能類似於上一個
printVector(v3);
vector<int> v4(10, 666); //(n,elem), 將n個elem拷貝給v4
printVector(v4);
//以上呼叫建構函式初始化
vector<int> v5(v4); //呼叫拷貝建構函式把v4拷貝給v5
printVector(v5);
//賦值
//1.使用assign會刪除容器之前的資料,重寫
vector<int> v6;
v6.assign(v1.begin(), v1.end()); //將區間:v1.begin()到v1.end()的資料賦值給v6
printVector(v6); //資料和v1一樣
v6.assign(3, 10000); //將刪除v6之前的資料,並將n個(3) val(10000)重新寫入到v6
printVector(v6);
//2.過載=
vector<int> v7 = v6;
printVector(v7);
//3.swap交換資料
v7.swap(v1); //交換當前vector容器物件v7與v1的資料
printVector(v7);
}
//vector空間大小操作
void test_three()
{
vector<int> v{ 1,2,3,4,5,6 };
printVector(v);
cout << "size : " << v.size() << endl; //返回物件v有多少個有效資料
cout << "capacity : " << v.capacity() << endl;
if (v.empty())
cout << "v為空" << endl;
else
cout << "v非空" << endl;
//resize重新指定容器的長度
//1.v.resize(n),重新指定長度為n,若容器變長,則以預設值(一般為0)填充新位置,若容器變短,則末尾超出長度的元素被刪除
v.resize(3);
printVector(v);
v.resize(10);
printVector(v);
//2.v.resize(n,elem),若容器變長,則用elem填充新位置,若容器變短,末尾超出指定的長度的元素被刪除
v.resize(7, 6); //容器變短不重寫: 1 2 3 0 0 0 0
printVector(v);
v.resize(10, 6);
printVector(v);
}
//注:資料量很大時可以用reserve預留出空間,避免多次開闢空間
//用swap收縮容器物件空間
void test_swap()
{
vector<int> v;
for (int i(0); i < 1000; i++)
v.push_back(i);
cout << "capacity of v : " << v.capacity() << endl;
cout << "size of v : " << v.size() << endl;
v.resize(10);
cout << "capacity of v : " << v.capacity() << endl; //沒有變化
cout << "size of v : " << v.size() << endl; //變為10
//匿名物件的空間為10,使用swap交換了v與匿名物件的空間,實現將物件v的空間收縮
vector<int>(v).swap(v);
cout << "capacity of v : " << v.capacity() << endl; //變為10
cout << "size of v : " << v.size() << endl; //10
}
//讀取資料
void test_four(){
vector<int> v;
v.push_back(100);
v.push_back(200);
v.push_back(300);
v.push_back(400);
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
cout << *it << " ";
cout << endl;
cout << "第二個資料 : " << v[1] << endl;
cout << "第三個資料 : " << v.at(2) << endl; //使用at越界時會丟擲異常,更安全
cout << "第一個資料 : " << v.front() << endl;
cout << "最後一個資料 : " << v.back() << endl;
//vector容器的迭代器支援隨機訪問
vector<int>::iterator itBegin = v.begin();
itBegin = itBegin + 1; //這樣寫不報錯就表明該容器支援隨機訪問
itBegin += 2;
list<int> l{ 10,30,49,90 };
list<int>::iterator litBegin = l.begin();
//litBegin = litBegin + 1; //error 因為連結串列容器沒有過載迭代器加法操作
}
//插入和刪除
void test_five()
{
vector<int> v;
v.push_back(10);
v.push_back(20);
//insert( , , ):第一個引數是要插入的位置(一個迭代器值),第二個引數為插入的資料的個數,第三個引數為插入資料的值
v.insert(v.begin(), 66); //在迭代器起始位置可以實現前插
printVector(v);
v.insert(v.begin() + 1, 2, 888);
printVector(v);
v.pop_back(); //刪除vector容器物件裡的最後一個元素
printVector(v);
//erase刪除指定位置(迭代器值即指標)或者指定區間[first,last)的資料,不包括last
v.erase(v.begin());
printVector(v);
v.erase(v.begin(), v.begin() + 1); //等價於v.erase(v.begin());
printVector(v);
//清除所有資料
v.clear();
if (v.empty())
cout << "v已經清空" << endl;
}
//逆序遍歷
void reverseprint() {
vector<int> v{ 1,2,3,4,5,6 };
//使用逆序迭代器:reverse_iterator
for (vector<int>::reverse_iterator rit = v.rbegin(); rit != v.rend(); rit++)
cout << *rit << " ";
cout << "\n";
}
int main()
{
//test_one();
//test_two();
//test_three();
//test_swap();
//test_four();
//test_five();
reverseprint();
cin.get();
return 0;
}
相關文章
- C++ 容器vector的使用C++
- c++ vector容器、字串C++字串
- C++之vector容器C++
- C++ vector容器的swap方法(容器互換)C++
- C++筆記— 排序函式sort() 和vector容器C++筆記排序函式
- c++ vector容器——檢測更改容量和大小 示例C++
- Vector容器鑲套容器
- STL容器---Vector
- c++ vectorC++
- vector——C++C++
- C++(std::vector)C++
- C++ Vector fundamentalC++
- C++ STL -- vectorC++
- C++:vector assignC++
- 初探STL容器之Vector
- C++簡單vectorC++
- STL原始碼剖析——vector容器原始碼
- C++ vector 的一些操作C++
- c/c++ 標準容器 vector的記憶體空間是如何自動增長的C++記憶體
- C++中vector<int>& numsC++
- c++ vector用法詳解C++
- C++ Vector資料插入C++
- c++ std::vector 切記C++
- C++【vector】用法和例子C++
- Vector容器主要函式說明函式
- C++ vector 列表初始化C++
- C++ ——vector陣列筆記C++陣列筆記
- c/c++ 標準庫 vectorC++
- C++ vector<std::tuple<XXX, XXX, XXX>>C++
- Java知識點總結(Java容器-Vector)Java
- C++中的容器類C++
- 自己動手寫Vector【Cherno C++教程】C++
- C++ vector 釋放記憶體的兩種方法C++記憶體
- C++ folly庫解讀(二) small_vector —— 小資料集下的std::vector替代方案C++
- C++ STL deque容器C++
- C++ 向順序容器新增容器C++
- C++ 學習筆記(1):STL、Vector 與 SetC++筆記
- c++ 中vector 常見用法(給初學者)C++