<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Vector_%28STL%29</id>
	<title>Vector (STL) - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Vector_%28STL%29"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Vector_(STL)&amp;action=history"/>
	<updated>2026-07-13T07:14:38Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Vector_(STL)&amp;diff=296615&amp;oldid=prev</id>
		<title>imported&gt;Yanghk 来自 2025年4月13日 (日) 06:57</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Vector_(STL)&amp;diff=296615&amp;oldid=prev"/>
		<updated>2025-04-13T06:57:34Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{redirect|Vector|[[线性代数]]中涉及的英文名同为vector的概念|向量|名稱為Vector的車用軟體工具商|Vector Informatik}}&lt;br /&gt;
{{noteTA|G1=IT}}&lt;br /&gt;
{{C++ Standard library}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vector&amp;#039;&amp;#039;&amp;#039; 是[[C++標準程式庫]]中的一個[[类_(计算机科学)|類]]，可視為會自動擴展容量的陣列，以循序（Sequential）的方式維護變數集合。&lt;br /&gt;
&lt;br /&gt;
vector的特色有支持隨機存取，在集合尾端增刪元素很快，但是在集合中間增刪元素比較費時。&lt;br /&gt;
&lt;br /&gt;
vector是[[C++標準程式庫]]中的眾多[[容器 (資料類型)|容器]]之一。 &lt;br /&gt;
&lt;br /&gt;
vector以[[模板 (C++)|模板]]方式實現，可以保存任意類型的變數，包括使用者自定義的資料型態，例如：它可以是放置整數（int）型態的vector、也可以是放置字串（string）型態的vector、或者放置使用者自定類別（user-defined class）的vector。&lt;br /&gt;
&lt;br /&gt;
== 設計 ==&lt;br /&gt;
vector 定義於 &amp;lt;vector&amp;gt; 標頭檔中。與其他STL元件一樣，vector 屬於std名稱空間。&lt;br /&gt;
&lt;br /&gt;
vector是[[C++標準程式庫]]裡最基本的容器，大多數狀況下都很有效率。vector設計之初即是為了改善C語言原生陣列的種種缺失與不便，而欲提供一種更有效、更安全的陣列。vector的使用介面刻意模擬C語言原生[[陣列]]，較明顯的差異在於記憶體管理，原生陣列必須在宣告陣列的時候明確指定陣列長度(例如 int a[5])，但是 vector 不需要指定，而是會在執行期依據狀況自我調整長度，動態增大容量。&lt;br /&gt;
&lt;br /&gt;
vector的表現一如[[資料結構]]中的[[陣列]]，允許隨機存取(Random Access)，以索引值(index)存取任一元素只要花費常數時間 O(1)，在集合尾端增加或刪除元素也是花費常數時間O(1)，若在vector集合中間增加或刪除元素時間複雜度是線性時間O(n)，較為費時。雖然C++標準並沒有規定實作方式，但大多數 vector 內部均使用動態陣列方式實作。&lt;br /&gt;
&lt;br /&gt;
=== 成員函式概觀 ===&lt;br /&gt;
&amp;lt;code&amp;gt;vector&amp;lt;/code&amp;gt; 類別是以[[容器 (抽象数据类型)|容器]] 模式為基準設計的，也就是說，基本上它有 &amp;lt;code&amp;gt;begin()&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;end()&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;size()&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;max_size()&amp;lt;/code&amp;gt;，&amp;lt;code&amp;gt;empty()&amp;lt;/code&amp;gt; 以及 &amp;lt;code&amp;gt;swap()&amp;lt;/code&amp;gt; 這幾個方法。&lt;br /&gt;
&lt;br /&gt;
* 存取元素的方法&lt;br /&gt;
**&amp;lt;code&amp;gt;vec[i]&amp;lt;/code&amp;gt; - 存取索引值為 i 的元素參照。 (索引值從零起算，故第一個元素是vec[0]。)&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.at(i)&amp;lt;/code&amp;gt; - 存取索引值為 i 的元素的參照，以 at() 存取會做陣列邊界檢查，如果存取越界將會拋出一個例外，這是與operator[]的唯一差異。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.front()&amp;lt;/code&amp;gt; - 回傳 vector 第一個元素的參照。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.back()&amp;lt;/code&amp;gt; - 回傳 vector 最尾端元素的參照。&lt;br /&gt;
* 新增或移除元素的方法&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.push_back()&amp;lt;/code&amp;gt; - 新增元素至 vector 的尾端，必要時會進行記憶體配置。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.pop_back()&amp;lt;/code&amp;gt; -  刪除 vector 最尾端的元素。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.insert()&amp;lt;/code&amp;gt; - 插入一個或多個元素至 vector 內的任意位置。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.erase()&amp;lt;/code&amp;gt; - 刪除 vector 中一個或多個元素。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.clear()&amp;lt;/code&amp;gt; - 清空所有元素。&lt;br /&gt;
* 取得長度/容量&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.size()&amp;lt;/code&amp;gt; - 取得 vector 目前持有的元素個數。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.empty()&amp;lt;/code&amp;gt; - 如果 vector 內部為空，則傳回 true 值。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.capacity()&amp;lt;/code&amp;gt; - 取得 vector 目前可容納的最大元素個數。這個方法與記憶體的配置有關，它通常只會增加，不會因為元素被刪減而隨之減少。&lt;br /&gt;
* 重新配置／重設長度&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.reserve()&amp;lt;/code&amp;gt; - 如有必要，可改變 vector 的容量大小（配置更多的記憶體）。在眾多的 STL 實例，容量只能增加，不可以減少。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.resize()&amp;lt;/code&amp;gt; - 改變 vector 目前持有的元素個數。&lt;br /&gt;
* 迭代 (Iterator)&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.begin()&amp;lt;/code&amp;gt; - 回傳一個Iterator，它指向 vector 第一個元素。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.end()&amp;lt;/code&amp;gt; - 回傳一個Iterator，它指向 vector 最尾端元素的下一個位置（請注意：它不是最末元素）。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.rbegin()&amp;lt;/code&amp;gt; - 回傳一個反向Iterator，它指向 vector 最尾端元素的。&lt;br /&gt;
**&amp;lt;code&amp;gt;vec.rend()&amp;lt;/code&amp;gt; - 回傳一個Iterator，它指向 vector 的第一個元素的前一個位置。&lt;br /&gt;
&lt;br /&gt;
== 使用說明 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 声明 ===&lt;br /&gt;
使用 vector 之前，必須先 #include&amp;lt;vector&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
声明一個 vector 變數的方法如下:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
std::vector&amp;lt;T&amp;gt; v; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
T 是 vector 要儲存的物件集合的型別，該 vector 的變數名稱是 v。T 可以是任何符合 Copy/Move Assignable 條件的型別，包括使用者自訂型別。如果 T 不符合 Copy / Move Assignable 或者複製 / 移动成本很高昂，可以考慮使用 T* 甚至 std::unique_ptr&amp;lt;T&amp;gt; 來代替 T。&lt;br /&gt;
&lt;br /&gt;
=== 取代陣列使用 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
int main() {&lt;br /&gt;
    std::vector&amp;lt;int&amp;gt; v;&lt;br /&gt;
&lt;br /&gt;
    v.push_back(1);&lt;br /&gt;
    v.push_back(2);&lt;br /&gt;
    v.push_back(3);&lt;br /&gt;
&lt;br /&gt;
    for(int i=0;i&amp;lt;3;++i)&lt;br /&gt;
        std::cout &amp;lt;&amp;lt; v[i] &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    system(&amp;quot;pause&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 長度/容量 ===&lt;br /&gt;
[[File:Vector size 000.png|thumb|right|這是程式執行後的結果]]&lt;br /&gt;
以下程式碼是用來說明 vector 的長度變化。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
//Headers and Macros&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdlib&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;iomanip&amp;gt;&lt;br /&gt;
#define SETW_1 10&lt;br /&gt;
#define SETW_2 6&lt;br /&gt;
#define SETW_3 10&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
typedef vector&amp;lt;int&amp;gt; Vint;&lt;br /&gt;
&lt;br /&gt;
//利用參照取得真正的 capacity 值&lt;br /&gt;
void PrintVectorInfo(Vint&amp;amp; v)&lt;br /&gt;
{&lt;br /&gt;
	cout&amp;lt;&amp;lt;setw(SETW_1)&amp;lt;&amp;lt;&amp;quot;Element&amp;quot;&amp;lt;&amp;lt;setw(SETW_2)&amp;lt;&amp;lt;&amp;quot;Size&amp;quot;;&lt;br /&gt;
	cout&amp;lt;&amp;lt;setw(SETW_3)&amp;lt;&amp;lt;&amp;quot;Capacity&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	for ( Vint::iterator it = v.begin(); it != v.end(); it ++)&lt;br /&gt;
	{&lt;br /&gt;
		cout&amp;lt;&amp;lt;setw(SETW_1)&amp;lt;&amp;lt;(*it)&amp;lt;&amp;lt;setw(SETW_2)&amp;lt;&amp;lt;v.size();&lt;br /&gt;
		cout&amp;lt;&amp;lt;setw(SETW_3)&amp;lt;&amp;lt;v.capacity()&amp;lt;&amp;lt;endl;&lt;br /&gt;
	}&lt;br /&gt;
	cout&amp;lt;&amp;lt;endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Main Function&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
	//==START==//&lt;br /&gt;
	//宣告一個 vector&lt;br /&gt;
	Vint vint;&lt;br /&gt;
	//宣告兩個整數變數&lt;br /&gt;
	int a = 11, b = 22, c = 33;&lt;br /&gt;
	//建立只有一個元素空間的 vint&lt;br /&gt;
	//把變數 a 複製至第一個元素內&lt;br /&gt;
	vint.push_back(a);&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Push Back: a = &amp;quot;&amp;lt;&amp;lt;a&amp;lt;&amp;lt;endl;&lt;br /&gt;
	//建立兩個元素空間的 vint&lt;br /&gt;
	//把變數 a 複製至第一個元素內&lt;br /&gt;
	//把變數 b 複製至第二個元素內&lt;br /&gt;
	//刪除上一次建立的 vint&lt;br /&gt;
	//上一次建立的 vint 只有一個元素空間&lt;br /&gt;
	//依此類推&lt;br /&gt;
	vint.push_back(b);&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Push Back: b = &amp;quot;&amp;lt;&amp;lt;b&amp;lt;&amp;lt;endl;&lt;br /&gt;
	vint.push_back(c);&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Push Back: c = &amp;quot;&amp;lt;&amp;lt;c&amp;lt;&amp;lt;endl;&lt;br /&gt;
	PrintVectorInfo(vint);&lt;br /&gt;
	//移除最後一個元素&lt;br /&gt;
	vint.pop_back();&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Pop Back......&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	PrintVectorInfo(vint);&lt;br /&gt;
	//移除最後一個元素&lt;br /&gt;
	vint.pop_back();&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Pop Back......&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	PrintVectorInfo(vint);&lt;br /&gt;
	//清除所有元素&lt;br /&gt;
	vint.clear();&lt;br /&gt;
	cout&amp;lt;&amp;lt;&amp;quot;Clear All Elements.&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
	//==END==//&lt;br /&gt;
	system(&amp;quot;pause&amp;quot;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===string 类型 Vector的使用===&lt;br /&gt;
第一种：使用迭代器进行遍历&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
	vector&amp;lt;string&amp;gt; v(3, &amp;quot;I Love Wikipedia &amp;quot;); // 元素个数，每个元素的值相同&lt;br /&gt;
	for (vector&amp;lt;string&amp;gt;::const_iterator it = v.begin(); it &amp;lt; v.end(); ++it) // 输出Vector元素&lt;br /&gt;
		cout &amp;lt;&amp;lt; *it &amp;lt;&amp;lt; endl;&lt;br /&gt;
	system(&amp;quot;pause&amp;quot;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
输出结果为：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I Love Wikipedia&lt;br /&gt;
I Love Wikipedia&lt;br /&gt;
I Love Wikipedia&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
第二种，与int类型相同&lt;br /&gt;
&amp;lt;syntaxhighlight lang = &amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
	vector&amp;lt;string&amp;gt; vec;&lt;br /&gt;
	string str;&lt;br /&gt;
	str = &amp;quot;I Love WikiPedia&amp;quot;;&lt;br /&gt;
	vec.push_back(str);&lt;br /&gt;
	vec.push_back(&amp;quot;123&amp;quot;);&lt;br /&gt;
	for(int i = 0; i &amp;lt; vec.size() ; ++i)&lt;br /&gt;
	{&lt;br /&gt;
		cout &amp;lt;&amp;lt; vec[i] &amp;lt;&amp;lt; endl;&lt;br /&gt;
	}&lt;br /&gt;
	system(&amp;quot;pause&amp;quot;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
输出结果为：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
I Love Wikipedia&lt;br /&gt;
123&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 删除元素==&lt;br /&gt;
vector 的成员函数 clear() 来删除所有的元素。这个操作并没有改变容器的容量，所以容量不變。&lt;br /&gt;
&lt;br /&gt;
使用 vector 的成员函数 pop_back() 来删除容器尾部的元素。&lt;br /&gt;
&lt;br /&gt;
成员函数 swap()，这个函数用来交换两个 vector 容器中的元素。因此可以与一个具有相同数据类型的内容为空的局部变量swap，从而实现彻底删除元素、释放容量的目的。&lt;br /&gt;
&lt;br /&gt;
成员函数 shrink_to_fit()，会造成容器现有的迭代器都失效。&lt;br /&gt;
&lt;br /&gt;
成员函数 erase() 有2个重载版本：&lt;br /&gt;
*删除单个元素，vector 的大小减 1；但容量不变；返回一个迭代器，它指向被删除元素后的一个元素。如果移除了最后一个元素，会返回 std::end(data)。&lt;br /&gt;
*移除一个范围内的元素：传入两个迭代器。返回的迭代器指向被删除元素后的位置，它是 std::begin(data)+1 ；如果删除了最后一个元素，它就是 std::end(data)。&lt;br /&gt;
&lt;br /&gt;
algorithm 头文件中的std::remove()，可以移除一个范围内匹配特定值的元素。remove() 是一个全局函数，所以它不能删除容器中的元素。会保持未移除的元素的顺序。真正删除需要用erase()成员函数，这叫做 &amp;#039;&amp;#039;&amp;#039;erase-remove&amp;#039;&amp;#039;&amp;#039;。remove() 算法返回的迭代器作为 erase() 的第一个参数，erase() 的第二个参数是所指向容器中最后一个元素后一个位置的迭代器。如：&lt;br /&gt;
    words.erase(std::remove(std::begin(words), std::end(words),&amp;quot;none&amp;quot;), std::end(words));&lt;br /&gt;
&lt;br /&gt;
== 優缺點探討 ==&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
&lt;br /&gt;
* {{en}} [http://www.sgi.com/tech/stl/Vector.html SGI 的 vector 使用說明（SGI STL specification of vector）] {{Wayback|url=http://www.sgi.com/tech/stl/Vector.html |date=20171225103029 }}&lt;br /&gt;
* {{en}} [http://www.cplusplus.com/reference/stl/vector/ C++ 參考：vector（C++ reference: vector）] {{Wayback|url=http://www.cplusplus.com/reference/stl/vector/ |date=20121115073229 }}&lt;br /&gt;
* {{en}} [https://web.archive.org/web/20070927030825/http://www.roguewave.com/support/docs/sourcepro/edition9-update1/html/stdlibref/vector.html C++ 標頭檔說明（C++ Header description）]&lt;br /&gt;
&lt;br /&gt;
[[Category:C++標準函式庫|V]]&lt;br /&gt;
[[Category:带有C++代码示例的条目|V]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Yanghk</name></author>
	</entry>
</feed>