目錄
- 前言
- 1. 走近vector
- 2. vector的使用
- 2.1 vector的定義
- 2.2 vector的構造
- 2.3 vector的遍歷
- 2.4 vector的增長操作
- 2.5 vector的增刪查改
- 后記
前言
hello,大家好,這期文章我們來介紹STL庫中的vector,望對大家有所幫助,下面,讓我們一起來走近它吧,
1. 走近vector
vector可以膚淺地理解成為靈活的陣列,我們在定義陣列的時候,是要確定陣列的大小的,而vector卻可以根據需要靈活地改變大小,

這是C++官網中對于vector的描述,翻譯過來是:
向量是表示陣列的序列容器,陣列的大小可以改變,就像陣列一樣,vector使用連續的存盤位置來存盤其元素,這意味著也可以使用指向其元素的常規指標上的偏移量來訪問其元素,這和在陣列中一樣有效,但與陣列不同的是,它們的大小可以動態更改,其存盤由容器自動處理,在內部,向量使用一個動態分配的陣列來存盤它們的元素,當插入新元素時,為了增加陣列的大小,可能需要重新分配陣列,這意味著分配一個新陣列并將所有元素移動到該陣列中,就處理時間而言,這是一項相對昂貴的任務,因此,vector不會在每次向容器添加元素時重新分配,相反,vector容器可能會分配一些額外的存盤空間來容納可能的增長,因此容器的實際容量可能會大于包含其元素所嚴格需要的存盤空間(即其大小),庫可以實作增長不同的策略來平衡記憶體使用和重新分配,但在任何情況下,重新分配應該只發生在對數生長間隔的大小,以便插入單個元素的向量可以提供平攤常數時間復雜度(見push_back方法),因此,與陣列相比,向量消耗更多的記憶體,以換取管理存盤和以有效方式動態增長的能力,與其他動態序列容器(deque、lists和forward_lists)相比,vector容器訪問其元素非常高效(就像陣列一樣),從其末端添加或洗掉元素也相對高效,對于在非末端位置插入或洗掉元素的操作,它們的性能比其他操作差,迭代器和參考的一致性也比list和forward_lists差,
2. vector的使用
2.1 vector的定義
vector<物件型別>物件名
尖括號用來指定物件型別,后面為定義的物件的名稱,
vector<int>a;
vector<double>a;
這兩個例子分別為定義一個int型的向量和定義一個double型的向量,
2.2 vector的構造

//無參構造
vector<int>v1;
//構造并初始化n個nal;
vector<int>v2(10, 0);
//拷貝構造
vector<int>v3(v2);
//迭代器初始化
vector<int>v4(v2.begin(), v2.end());
2.3 vector的遍歷
我們在這里展示三種遍歷操作,
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v1(10, 0);
//遍歷1
for (size_t i = 0; i < v1.size(); ++i)
{
cout << v1[i] << " ";
}
cout << endl;
//遍歷2
vector<int>::iterator it1 = v1.begin();
while (it1 != v1.end())
{
cout << *it1 << " ";
++it1;
}
cout << endl;
//遍歷3
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
}
2.4 vector的增長操作

#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v1(10, 0);
vector<int>v2;
//資料個數
cout << v1.size() << endl;
//容量
cout << v1.capacity() << endl;
//判斷是否為空,非空為1,空為0
cout << v1.empty() << endl;
cout << v2.empty() << endl;
//改變vector的size
//第一個引數為改變后的個數,第二個為新增個數的元素
v1.resize(15, 1);
cout << v1.size() << endl;;
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
//改變容量
cout << v1.capacity() << endl;
v1.reserve(20);
cout << v1.capacity() << endl;
}

2.5 vector的增刪查改

#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>v1;
//尾插
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
//尾刪
v1.pop_back();
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
//查找
vector<int>::iterator pos = find(v1.begin(), v1.end(), 3);
cout << *pos << endl;
//插入
v1.insert(pos, 0);//在pos位置前插入0
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
//洗掉
v1.erase(pos);//洗掉pos位置的元素
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
//交換
vector<int>v2(5, 0);
vector<int>v3(5, 1);
v2.swap(v3);
for (auto e : v2)
{
cout << e << " ";
}
cout << endl;
for (auto e : v3)
{
cout << e << " ";
}
cout << endl;
//像陣列一樣訪問
v1[1] = 100;
for (auto e : v1)
{
cout << e << " ";
}
cout << endl;
}

后記
好的,在這篇文章中,我們介紹了vector的一些用法,希望對大家有所幫助,這個系列的文章最后都是要分享一首詩的,今天我們來分享陳年喜的炸裂志
早晨起來 頭像炸裂一樣疼
這是大機器的額外饋贈
不是鋼鐵的錯
是神經老了 脆弱不堪
我不大敢看自己的生活
它堅硬 鉉黑
有風鎬的銳角
石頭碰一碰 就會流血
我在五千米深處打發中年
我把巖層一次次炸裂
借此 把一生重新組合
我微小的親人 遠在商山腳下
他們有病 身體落滿灰塵
我的中年裁下多少
他們的晚年就能延長多少
我身體里有炸藥三噸
他們是引信部分
就在昨夜 在他們床前
我巖石一樣 轟地炸裂一地
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/298956.html
標籤:python
