STL之vector的学习1
现在对STL的学习主要是看《C++ Primer》,这本书买回来大半年,虽然很多都基本看了,但是真得真得看得不够仔细。现在重新再看多几遍。
vector是一个类模板,不是数据类型。
以下是C++ Primer里面的代码和一些实例说明。
以后还会有vector的代码实现。
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 int main( ) 6 { 7 vector<int> v1; //v1为空 8 vector<int> v2(v1); //v2为v1的副本 9 vector<int> v3(10, 99); //v3包含10个99 10 vector<int> v4(10); //v4含有初始化的元素的10个副本 11 /*v1和v4是有区别的,v1里面是空的,而v4里面是有东西的,因为是整型,里面的10个元素都为0*/ 12 if(v1.empty()) 13 cout << "v1为空的!" << endl; 14 if(v1.size() == 0) 15 cout << "v1为空的!" << endl; 16 for(int i = 0; i != 10; ++i) 17 cout << v3[i] << " "; 18 cout << endl; 19 /*判断vector是否为空的两种方法*/ 20 21 /*int n, i, m; 22 cin >> n; 23 for(i = 0; i != n; ++i) 24 { 25 cin >> m; 26 v1.push_back(m); 27 } 28 cout << v1.size() << endl; 29 for(vector<int>::size_type ix = 0; ix != v1.size(); ++ix) 30 { 31 cout << v1[ix] <<" "; 32 } 33 cout << endl;*/ 34 /*将元素插入vector对象的后面 35 输入10个数字 10 9 8 7 6 5 4 3 2 1 36 输出为 10 9 8 7 6 5 4 3 2 1 37 尽量不要用int整型的数去历遍vector,就好像string那样。用vector<int>::size_type的类型。尽量严谨点吧 38 */ 39 vector<int> v5; 40 /*for(vector<int>::size_type ix = 0; ix != 10; ++ix) 41 v5[ix] = ix;*/ 42 /*注意vector的下标只能获取已存在的元素,v5是空的,所以是不能运行的注意空的vector只能通过v.push_back()来添加元素*/ 43 /*for(vector<int>::size_type ix = 0; ix != 10; ++ix) 44 v4[ix] = ix; 45 for(vector<int>::size_type ix = 0; ix != 10; ++ix) 46 cout << v4[ix] << " "; 47 cout << endl;*/ 48 vector<int> v6(10); 49 vector<int>::iterator iter; 50 for(iter = v6.begin(); iter != v6.end(); ++iter) 51 cin >> *iter; 52 for(iter = v6.begin(); iter != v6.end(); ++iter) 53 cout << *iter << " "; 54 cout << endl; 55 /*vector的迭代器类型:vector<int>::iterator,注意容器的begin和end函数,begin返回的迭代器指向第一个元素,。end返回的迭代器指向末端元素的下一个 56 这个要注意。迭代器能使用解引用操作符(迭代器相当于指针,不过比指针好),所以往vector里面输入元素有两种方法,一种是下标,当然那vector不能是空的 57 第二就是用迭代器。输出也是这样*/ 58 vector<int>::const_iterator iter1; 59 for(iter1 = v6.begin(); iter1 != v6.end(); ++iter1) 60 cout << *iter1 << " "; 61 cout << endl; 62 /*for(iter1 = v6.begin(); iter1 != v6.end(); ++iter1) 63 *iter1 = 0; 64 */ 65 /*const_iterator迭代器返回的为一个const值,所以不允许用const_iterator进行赋值。相当于指向const的指针,不能通过指针去修改它的值*/ 66 vector<int> v7(10); 67 const vector<int>::iterator iter2 = v7.begin(); 68 *iter2 = 0; 69 //++iter2; 这是一个const类型的迭代器,所以可以通过迭代器修改自身的值,但是不能改变迭代器指向的元素。相当于const指针。 70 //const vector<int>::const_iterator iter3 = v7.begin(); 这是一个const类型const_iterator迭代器,既不能通过迭代器修改自身的值,也不能改变迭代器指向的元素。 71 return 0; 72 }