C++ Primer 学习笔记(1)——vector的使用方法

来源:互联网 发布:ubuntu移动一个文件夹 编辑:程序博客网 时间:2024/05/19 00:43


书到手了好几天,今天第一次写学习笔记。看到了对vector迭代器的使用方法,需要mark一下。


vector类型

首先,vector是一个类模版(class template)。使用模版可以编写一个类定义或是函数定义,而用于多种不同的数据类型。因此,可以保存多种类型的vector,例如vector<int>,vector<double>,vector<char>,vector<string>等等,当然可以是自定义的类型,如下代码:

typedef example{int element1;char element2[10];}definetype;vector<definetype> a;

初始化vector

初始化vector有四种方法,分别是:

vector<T> v1;//vector保存类型为T的对象,默认构造函数,v1为空vector<T> v2(v1);//v2是v1的一个副本vector<T> v3(n,i);//v3是包含n个值为i的元素的(C++也可以如此赋值,std::string a(10,'a');a="aaaaaaaaaa")vector<T> v4(n);//v4含有值初始化的元素的n个副本,就是n个空值。

对vector元素的操作

这里只写迭代器操作,不赘述下标操作。C++中迭代器为了实现其连续性,采取了申请非连续内存空间的方法。目前不懂- -

迭代器定义及声明

迭代器(iterator)是一种数据类型,它可检查容器内元素并遍历元素。
请如下声明:
vector<T>::iterator iter;//T means the data type

vector迭代器的自增和解引用运算

迭代器类型可以用解引用操作符(*)来访问迭代器所指元素:
*iter=0;//赋值为0,给当前迭代器所指元素

如果使用const_iterator,不会改变所指元素的值,即不允许用const_iterator进行赋值。

请注意,不能把const_iterator与const的iterator混为一谈,前者不能够写元素,后者的值是不可改变的。

迭代器应用实例

#include <iostream>#include <string>#include <vector>#include <functional>#include <algorithm>using namespace std;int main(){   int n;   string a;   vector<string> vec;   cin>>n;   while(n--)   {       cin>>a;       vec.push_back(a);   }   sort(vec.begin(),vec.end(),less<string>());   cout<<endl;   for(vector<string>::iterator iter=vec.begin();iter!=vec.end();++iter)   {       cout<<*iter<<endl;   }}

上述程序实现了输入n个字符串,对字符串进行升序排序并输出的功能。
其中:
1.string类型可以支持长度变化的字符串,C++标准库将负责管理与存储字符相关的内存,以及提供各种有用的操作。string类型的赋值依然有四种方式,如下:
string v1;//string默认构造函数,v1为空string v2(v1);//v2是v1的一个副本string v3("aaa");//将v3初始化为一个字符串字面值副本string v4(n,'c');//将v4初始化为字符'c'的n个副本
2.sort排序,less<string>()升序
3.*iter表示当前迭代器所指容器元素
4.迭代器可进行算数操作(如本例的自增)