STL 型式(STL idiom) vector
2012-06-05 02:13
106 查看
http://caterpillar.onlyfun.net/Gossip/CppGossip/vector2.html
vector的STL型式,其實就是以物件導向的方式來操作vector(如果您還沒接觸過物件導向程式設計,這邊介紹的可能稍有難度),以物件的方式來操作vector是比較被鼓勵的方式,以下將介紹幾個vector的基本操作。
您可以建構一個元素為空的vector物件:
vector<int>
ivector;
如果打算將元素放入vector中,可以使用push_back(),例如:
for(int
i = 0; i < 5; i++) {
ivector.push_back(i);
}
如果打算將元素循序取出,則可以begin()與end()方法分別傳回起始位置的iterator與結束位置的iterator,例如:
for(vector<int>::iterator
it = ivector.begin();
it
!= ivector.end();
it++)
{
cout
<< *it
<< " ";
}
cout
<< endl;
iterator是標準函式庫定義類別(Class),它是一個指標,指向iterator物件的真正位址,對它進行++的動作,表示移動至
iterator的下一個元素,對它使用*運算子(Dereferences
operator),表示提取出iterator目前位址的值,如果iterator走訪至結束位置的iterator的位址,表示元素走訪完畢。
雖然您可以使用下標運算子[
]來存取vector的元素,但實際上要知道vector與陣列本質上是不相同的,當您如最上頭那樣宣告一個空的vector物件時,其容量(capacity)為0,長度(size)也為0,所以此時您不能使用ivector[0]來取得第一個元素值,因為實際上ivector中還沒有任何的元素。
當使用push_back()將元素加入vector時,vector的長度會自動增長,由於每次增長度都要配置記憶體過於沒有效率,所以vector會自動先增加足夠的容量,當元素的長度超過容量時,才會再重新配置新的容量,您可以使用capacity()取得,使用size()取得元素長度,下面這個程式綜合以上的幾個介紹作了示範:
結果如下:
如果打算對vector進行排序、尋找、反轉等操作,可以使用標準函式庫中的泛型演算法,要使用泛型演算法必須先含入表頭檔:
#include
<algorithm>
下面這個程式直接示範了排序、尋找、反轉等操作:
執行結果:
vector的STL型式,其實就是以物件導向的方式來操作vector(如果您還沒接觸過物件導向程式設計,這邊介紹的可能稍有難度),以物件的方式來操作vector是比較被鼓勵的方式,以下將介紹幾個vector的基本操作。
您可以建構一個元素為空的vector物件:
vector<int>
ivector;
如果打算將元素放入vector中,可以使用push_back(),例如:
for(int
i = 0; i < 5; i++) {
ivector.push_back(i);
}
如果打算將元素循序取出,則可以begin()與end()方法分別傳回起始位置的iterator與結束位置的iterator,例如:
for(vector<int>::iterator
it = ivector.begin();
it
!= ivector.end();
it++)
{
cout
<< *it
<< " ";
}
cout
<< endl;
iterator是標準函式庫定義類別(Class),它是一個指標,指向iterator物件的真正位址,對它進行++的動作,表示移動至
iterator的下一個元素,對它使用*運算子(Dereferences
operator),表示提取出iterator目前位址的值,如果iterator走訪至結束位置的iterator的位址,表示元素走訪完畢。
雖然您可以使用下標運算子[
]來存取vector的元素,但實際上要知道vector與陣列本質上是不相同的,當您如最上頭那樣宣告一個空的vector物件時,其容量(capacity)為0,長度(size)也為0,所以此時您不能使用ivector[0]來取得第一個元素值,因為實際上ivector中還沒有任何的元素。
當使用push_back()將元素加入vector時,vector的長度會自動增長,由於每次增長度都要配置記憶體過於沒有效率,所以vector會自動先增加足夠的容量,當元素的長度超過容量時,才會再重新配置新的容量,您可以使用capacity()取得,使用size()取得元素長度,下面這個程式綜合以上的幾個介紹作了示範:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> ivector; for(int i = 0; i < 10; i++) { ivector.push_back(i); } for(vector<int>::iterator it = ivector.begin(); it != ivector.end(); it++) { cout << *it << " "; } cout << endl; cout << "capacity: " << ivector.capacity() << endl << "size: " << ivector.size() << endl; return 0; }
結果如下:
0 1 2 3 4 5 6 7 8 9 capacity: 16 size: 10 |
#include
<algorithm>
下面這個程式直接示範了排序、尋找、反轉等操作:
#include <algorithm> #include <iostream> #include <vector> using namespace std; int main() { int iarr[] = {30, 12, 55, 31, 98, 11, 41, 80, 66, 21}; vector<int> ivector(iarr, iarr + 10); // 排序 sort(ivector.begin(), ivector.end()); for(vector<int>::iterator it = ivector.begin(); it != ivector.end(); it++) { cout << *it << " "; } cout << endl; cout << "輸入搜尋值:"; int search = 0; cin >> search; vector<int>::iterator it = find(ivector.begin(), ivector.end(), search); if(it != ivector.end()) { cout << "找到搜尋值!" << endl; } else { cout << "找不到搜尋值!" << endl; } // 反轉 reverse(ivector.begin(), ivector.end()); for(vector<int>::iterator it = ivector.begin(); it != ivector.end(); it++) { cout << *it << " "; } cout << endl; return 0; }
執行結果:
11 12 21 30 31 41 55 66 80 98 輸入搜尋值:41 找到搜尋值! 98 80 66 55 41 31 30 21 12 11 |
相关文章推荐
- STL&nbsp;型式(STL&nbsp;idiom)&nbsp;vector
- 陣列型式(Array idiom) vector
- STL vector erase 笔试 曼恒数字
- STL中为什么我们更偏爱vector而不是deque
- STL 向量(vector)的使用
- STL--Vector
- 标准模板库(STL)学习指南之vector向量
- STL提供了三个最基本的容器:vector,list,deque。
- 【转】[STL]vector和deque的内存释放(clear)
- 标准模板库 STL-2 编程题#1(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;vector(sort)中重载 <)
- C++ STL中的vector的内存分配与释放
- STL(二)vector 动态数组
- UVA12096 the SetStack Computer(STL中,map,set,vector,stack联合应用)
- 模拟实现STL中的Vector容器
- STL中vector、deque、list的区别
- C++ STL/ (3) vector
- [C++]STL容器Vector的内存释放
- [zz]如何使用istream_iterator将cin转到vector? (C/C++) (STL)
- SGI STL 和 VS下STL的vector不同内存增长策略
- STL之vector容器详解