走進C++程式世界----STL標準庫
阿新 • • 發佈:2019-02-19
/*
*operator_fun.cpp
*cDate : 2013-11-09
*Author: sjin
*Mail:[email protected]
*/
//簡單的demo程式,認識向量
void demo();
void init_vector();
void demo2();
/* *vector.cpp *cDate : 2014-04-09 *Author: sjin *Mail:[email protected] */ #include <iostream> #include <vector> #include <algorithm> #include "vector.h" using namespace std; //STL容器簡單介紹 //順序容器vector void demo() { int i; /*一個動態的整型陣列*/ vector <int> vecIntArray; vecIntArray.push_back(1988); vecIntArray.push_back(2); vecIntArray.push_back(20); vecIntArray.push_back(2013); vecIntArray.push_back(11); vecIntArray.push_back(2); cout << "動態陣列的內容是:" << endl; vector <int>::iterator iArrayWalker = vecIntArray.begin(); while ( iArrayWalker != vecIntArray.end() ){ cout << *iArrayWalker << endl; ++ iArrayWalker; } //查詢2013是否存在陣列中,並列印在陣列中的位置 vector <int>::iterator iElement = find(vecIntArray.begin(),vecIntArray.end(),2013); if(iElement != vecIntArray.end()){ int nPosition = distance(vecIntArray.begin(),iElement); cout << "Value " << *iElement; cout << "發現他在陣列中的位置是:"<< nPosition << endl; } } /*1、預設建構函式,構造一個初始長度為0的空向量,如:vector<int> v1; *2、帶有單個整形引數的建構函式,此引數描述了向量的初始大小。這個建構函式還有一個可選的引數,這是一個型別為T的例項,描述了 *各個向量種各成員的初始值;如:vector<int> v2(n,0); 如果預先定義了:n,他的成員值都被初始化為0; * 3、複製建構函式,構造一個新的向量,作為已存在的向量的完全複製,如:vector<int> v3(v2); * 4、帶兩個常量引數的建構函式,產生初始值為一個區間的向量。區間由一個半開區間[first,last) 來指定。如:vector<int> v4 *(first,last) */ void init_vector() { int ar[10] = {1,2,3,4,5,6,7,8,9,0}; char *str = "Hello World!"; vector <int> vec1(ar,ar+10); vector <char> vec2(str,str+strlen(str)); //列印vec1 和vec2 //const_iterator :是迭代器 vector <int>::const_iterator p; cout <<"****************start vec1************************" <<endl; for(p = vec1.begin(); p != vec1.end(); ++p){ cout << *p <<" "; } cout << "\n*********************end vec1*********************" << endl; vector <char>::const_iterator p1; cout <<"\n\n****************start vec2************************" <<endl; for(p1 = vec2.begin(); p1 != vec2.end(); ++p1){ cout << *p1 <<" "; } cout << "\n*********************end vec2*********************" << endl; } /*測試容器的功能,瞭解基本函式的使用方法 *begin(),end(),push_back(),assign(),front(),back(),erase(),empty(),at(),size()。 */ //自定義型別 typedef vector <int> INTVECTOR; void demo2() { //vec1物件初始化為空 INTVECTOR vec1; //vec2 物件最初由10個值為6的元素 INTVECTOR vec2(10,6); //vec3 物件最初由3個值為6的元素,拷貝構造 INTVECTOR vec3(vec2.begin(),vec2.begin()+3); //宣告一個名為i 的雙向迭代器 INTVECTOR::iterator i; cout <<"\n****************start vec1************************" <<endl; for(i = vec1.begin(); i != vec1.end(); ++i){ cout << *i <<" "; } cout << "\n*********************end vec1*********************" << endl; cout <<"\n****************start vec2************************" <<endl; for(i = vec2.begin(); i != vec2.end(); ++i){ cout << *i <<" "; } cout << "\n*********************end vec2*********************" << endl; cout <<"\n****************start vec3************************" <<endl; for(i = vec3.begin(); i != vec3.end(); ++i){ cout << *i <<" "; } cout << "\n*********************end vec3*********************" << endl; cout <<"測試新增和插入成員函式,vector 不支援從前插入"<<endl; vec1.push_back(2); vec1.push_back(4); //在vec1 第一個位置上插入5 vec1.insert(vec1.begin()+1,5); //在vec1第一位置開始插入vec3的所有成員 vec1.insert(vec1.begin()+1,vec3.begin(),vec3.end()); cout <<"\n********push_back and insert start vec1**********" <<endl; for(i = vec1.begin(); i != vec1.end(); ++i){ cout << *i <<" "; } cout << "\n*********push_back and insert end vec1*********" << endl; //測試賦值成員函式 //重新給vec2賦值,8個成員都被賦值為1; vec2.assign(8,1); cout <<"\n********vec2.assign(8,1); start vec2************" <<endl; for(i = vec2.begin(); i != vec2.end(); ++i){ cout << *i <<" "; } cout << "\n*********vec2.assign(8,1); end vec2************" << endl; //測試引用類函式 cout<<"vec1第零個成員 vec1.front()="<<vec1.front()<<endl; cout<<"vec1的最後一個成員 vec1.back()="<<vec1.back()<<endl; cout<<"vec1的第五個成員 vec1.at(4)="<<vec1.at(4)<<endl; cout<<"vec1的第五個成員 vec1[4]="<<vec1[4]<<endl; //測試移出和刪除 vec1.pop_back();//將最後一個成員移出vec1 vec1.erase(vec1.begin()+1,vec1.end()-2);//刪除成員 cout<<"vec1.pop_back() and vec1.erase():" <<endl; for (i =vec1.begin(); i !=vec1.end(); ++i){ cout << *i << " "; } cout << endl; //顯示序列的狀態資訊 cout<<"vec1.size(): "<<vec1.size()<<endl;//列印成員個數 cout<<"vec1.empty(): "<<vec1.empty()<<endl;//清空 }
/*
*operator_fun.cpp
*cDate : 2013-11-09
*Author: sjin
*Mail:[email protected]
*/
#include <iostream>
#include <vector>
#include <algorithm>
#include "vector.h"
using namespace std;
//STL容器簡單介紹
int main()
{
//demo();
//init_vector();
demo2();
return 0;
}
push_back()是將資料放入vector(向量)或