【C++】 C++标准模板库(一) Vector
一:C++ Vectors
Vectors 包含著一系列連續(xù)存儲的元素,其行為和數(shù)組類似。訪問Vector中的任意元素或從末尾添加元素都可以在常量級時間復(fù)雜度內(nèi)完成,而查找特定值的元素所處的位置或是在Vector中插入元素則是線性時間復(fù)雜度。
| Constructors | 構(gòu)造函數(shù) |
| Operators | 對vector進行賦值或比較 |
| assign() | 對Vector中的元素賦值 |
| at() | 返回指定位置的元素 |
| back() | 返回最末一個元素 |
| begin() | 返回第一個元素的迭代器 |
| capacity() | 返回vector所能容納的元素數(shù)量(在不重新分配內(nèi)存的情況下) |
| clear() | 清空所有元素 |
| empty() | 判斷Vector是否為空(返回true時為空) |
| end() | 返回最末元素的迭代器(譯注:實指向最末元素的下一個位置) |
| erase() | 刪除指定元素 |
| front() | 返回第一個元素 |
| get_allocator() | 返回vector的內(nèi)存分配器 |
| insert() | 插入元素到Vector中 |
| max_size() | 返回Vector所能容納元素的最大數(shù)量(上限) |
| pop_back() | 移除最后一個元素 |
| push_back() | 在Vector最后添加一個元素 |
| rbegin() | 返回Vector尾部的逆迭代器 |
| rend() | 返回Vector起始的逆迭代器 |
| reserve() | 設(shè)置Vector最小的元素容納數(shù)量 |
| resize() | 改變Vector元素數(shù)量的大小 |
| size() | 返回Vector元素數(shù)量的大小 |
| swap() | 交換兩個Vector |
2. 庫函數(shù)詳解
構(gòu)造函數(shù)
語法:| vector();vector( size_type num, const TYPE &val );vector( const vector &from );vector( input_iterator start, input_iterator end ); |
C++ Vectors可以使用以下任意一種參數(shù)方式構(gòu)造:
- 無參數(shù) - 構(gòu)造一個空的vector,
- 數(shù)量(num)和值(val) - 構(gòu)造一個初始放入num個值為val的元素的Vector
- vector(from) - 構(gòu)造一個與vector from 相同的vector
- 迭代器(start)和迭代器(end) - 構(gòu)造一個初始值為[start,end)區(qū)間元素的Vector(注:半開區(qū)間).
舉例,下面這個實例構(gòu)造了一個包含5個值為42的元素的Vector
vector<int> v1( 5, 42 );運算符
語法:| v1 == v2v1 != v2v1 <= v2v1 >= v2v1 < v2v1 > v2 v[] |
C++ Vectors能夠使用標(biāo)準(zhǔn)運算符: ==, !=, <=, >=, <, 和 >. 要訪問vector中的某特定位置的元素可以使用 [] 操作符.
兩個vectors被認(rèn)為是相等的,如果:
assign函數(shù)
語法:| void assign( input_iterator start, input_iterator end );void assign( size_type num, const TYPE &val ); |
assign() 函數(shù)要么將區(qū)間[start, end)的元素賦到當(dāng)前vector,或者賦num個值為val的元素到vector中.這個函數(shù)將會清除掉為vector賦值以前的內(nèi)容.
?
at函數(shù)
語法:| TYPE at( size_type loc ); |
at() 函數(shù) 返回當(dāng)前Vector指定位置loc的元素的引用. at() 函數(shù) 比 [] 運算符更加安全, 因為它不會讓你去訪問到Vector內(nèi)越界的元素. 例如, 考慮下面的代碼:
vector<int> v( 5, 1 );for( int i = 0; i < 10; i++ ) {cout << "Element " << i << " is " << v[i] << endl; }這段代碼訪問了vector末尾以后的元素,這將可能導(dǎo)致很危險的結(jié)果.以下的代碼將更加安全: vector<int> v( 5, 1 );for( int i = 0; i < 10; i++ ) {cout << "Element " << i << " is " << v.at(i) << endl; }取代試圖訪問內(nèi)存里非法值的作法,at() 函數(shù)能夠辨別出訪問是否越界并在越界的時候拋出一個異常.
相關(guān)內(nèi)容: [] 操作符
back 函數(shù)
語法:| TYPE back(); |
back() 函數(shù)返回當(dāng)前vector最末一個元素的引用.例如:
vector<int> v;for( int i = 0; i < 5; i++ ) {v.push_back(i); }cout << "The first element is " << v.front() << " and the last element is " << v.back() << endl;這段代碼產(chǎn)生如下結(jié)果:
The first element is 0 and the last element is 4 相關(guān)內(nèi)容: front().begin 函數(shù)
語法:| iterator begin(); |
begin()函數(shù)返回一個指向當(dāng)前vector起始元素的迭代器.例如,下面這段使用了一個迭代器來顯示出vector中的所有元素:
vector<int> v1( 5, 789 ); vector<int>::iterator it; for( it = v1.begin(); it != v1.end(); it++ )cout << *it << endl; 相關(guān)內(nèi)容: end().capacity 函數(shù)
語法:| size_type capacity(); |
capacity() 函數(shù) 返回當(dāng)前vector在重新進行內(nèi)存分配以前所能容納的元素數(shù)量.
clear 函數(shù)
語法:| void clear(); |
clear()函數(shù)刪除當(dāng)前vector中的所有元素.
empty 函數(shù)
語法:| bool empty(); |
如果當(dāng)前vector沒有容納任何元素,則empty()函數(shù)返回true,否則返回false.例如,以下代碼清空一個vector,并按照逆序顯示所有的元素:
vector<int> v;for( int i = 0; i < 5; i++ ) {v.push_back(i);}while( !v.empty() ) {cout << v.back() << endl;v.pop_back();} 相關(guān)內(nèi)容: size()end 函數(shù)
語法:| iterator end(); |
end() 函數(shù)返回一個指向當(dāng)前vector末尾元素的下一位置的迭代器.注意,如果你要訪問末尾元素,需要先將此迭代器自減1.
相關(guān)內(nèi)容: begin()
erase 函數(shù)
語法:| iterator erase( iterator loc );iterator erase( iterator start, iterator end ); |
這段代碼將會顯示如下輸出:
BCDEFGHIJ CDEFGHIJ DEFGHIJ EFGHIJ FGHIJ GHIJ HIJ IJ J 相關(guān)內(nèi)容: pop_back().front 函數(shù)
語法:| TYPE front(); |
front()函數(shù)返回當(dāng)前vector起始元素的引用
相關(guān)內(nèi)容: back().
get_allocator 函數(shù)
語法:| allocator_type get_allocator(); |
get_allocator() 函數(shù)返回當(dāng)前vector的內(nèi)存分配器.
insert 函數(shù)
語法:| iterator insert( iterator loc, const TYPE &val );void insert( iterator loc, size_type num, const TYPE &val );void insert( iterator loc, input_iterator start, input_iterator end ); |
insert() 函數(shù)有以下三種用法:
- 在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器,
- 在指定位置loc前插入num個值為val的元素
- 在指定位置loc前插入?yún)^(qū)間[start, end)的所有元素 .
這段代碼將顯示:
CCCCABCDEFGHIJmax_size 函數(shù)
語法:| size_type max_size(); |
max_size() 函數(shù)返回當(dāng)前vector所能容納元素數(shù)量的最大值(譯注:包括可重新分配內(nèi)存).
pop_back
語法:| void pop_back(); |
pop_back()函數(shù)刪除當(dāng)前vector最末的一個元素,例如:
vector<char> alphaVector; for( int i=0; i < 10; i++ )alphaVector.push_back( i + 65 );int size = alphaVector.size(); vector<char>::iterator theIterator; for( int i=0; i < size; i++ ) {alphaVector.pop_back();for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); theIterator++ )cout << *theIterator;cout << endl; }這段代碼將顯示以下輸出:
ABCDEFGHI ABCDEFGH ABCDEFG ABCDEF ABCDE ABCD ABC AB A 相關(guān)內(nèi)容: erase().push_back 函數(shù)
語法:| void push_back( const TYPE &val ); |
push_back()添加值為val的元素到當(dāng)前vector末尾
rbegin 函數(shù)
語法:| reverse_iterator rbegin(); |
rbegin函數(shù)返回指向當(dāng)前vector末尾的逆迭代器.(譯注:實際指向末尾的下一位置,而其內(nèi)容為末尾元素的值,詳見逆代器相關(guān)內(nèi)容)
rend 函數(shù)
語法:| reverse_iterator rend(); |
rend()函數(shù)返回指向當(dāng)前vector起始位置的逆迭代器.
reserve 函數(shù)
語法:| void reserve( size_type size ); |
reserve()函數(shù)為當(dāng)前vector預(yù)留至少共容納size個元素的空間.(譯注:實際空間可能大于size)
resize 函數(shù)
語法:| void resize( size_type size, TYPE val ); |
resize() 函數(shù)改變當(dāng)前vector的大小為size,且對新創(chuàng)建的元素賦值val
size 函數(shù)
語法:| size_type size(); |
size() 函數(shù)返回當(dāng)前vector所容納元素的數(shù)目
相關(guān)內(nèi)容: empty()
swap 函數(shù)
語法:| void swap( vector &from ); |
swap()函數(shù)交換當(dāng)前vector與vector from的元素
總結(jié)
以上是生活随笔為你收集整理的【C++】 C++标准模板库(一) Vector的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux系统编程应用】 Linux系
- 下一篇: 【C++】 C++标准模板库(二) Li