标签:iter 函数返回 成员访问 其他 括号 const for语句 允许 ack
定义:vector表示对象的集合,其中所有对象的类型都相同。
访问方式:索引
头文件:<vector>
本质:类模板
NOTE:
也允许把一个vector对象的元素拷贝给另外一vector对象,但两个vector对象的类型必须相同。
C++提供的几种不同的初始化方式,大多数情况下这些初始化方式可以相互等价地使用,但有三种特殊情况:
vector<string> v1("a","an","name"); //错误 vector<string> v2{"a","an","name"}; //列表初始化
vector<int> v(10,-1); //10个-1 vector<string> s(10,"hi"); //10个string的hi
通常情况下,可只提供vector对象容纳的元素数量而不用初始值,库会为每一个元素提供一个初始化值,这个值由vector中对象的类型决定。
vector<int> v(10); //10个元素,每个初始化为0 vector<string> s(10); //10个元素都初始化为空字符
NOTE:
初始化时,圆括号是用来构造vector对象的,如果是花括号则表示是列表初始化,但是如果无法执行列表初始化时将会考虑其他初始化方式。
vector<int> v1(10); //v1有10个元素,每个值为0 vector<int> v2{10}; //v2有1个元素,该元素的值是10 vector<int> v3(10,1); //v3有10个元素,每个元素的值都是1 vector<int> v4{10,1}; //v4有2个元素,值分别是10和1
vector<string> v6("hi"); //错误,不能使用字符串字面值构件vector对象
vector<string> v7{10}; //此时不能执行列表初始化,所以是直接初始化,v7有10个默认初始化的元素
利用成员函数push_back();
NOTE:
使用下标访问元素,必须要确保下标的合法性,只能对已经存在的元素执行下标操作,确保下标合法的一个有效手段就是尽可能使用范围for语句。
vector<int> v{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (auto &i : v) { cout << i << endl; }
除了使用下标来访问string对象的字符和vector对象的元素之外,还可以使用迭代器来达到同样的效果。
迭代器和指针类似,都提供了对对象的间接访问,但也有区别。获取迭代器不是取地址符,有迭代器的类型同时拥有返回迭代器的成员。
auto b=v.begin(), e=v.end();
迭代器相等的判定原则:两个迭代器指向的元素相同或者都是同一个容器的尾迭代器,则相等。
iterator和const_iterator来表示迭代器的类型。const_iterator能读取但不能修改它所指的元素值。如果vector对象或string对象是一个常量,只能使用const_terator;如果vector对象或string对象不是常量,那么既能使用iterator也能使用const_iterator。
begin和end返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator,如果对象不是常量,返回iterator.
vector<int> v; cosnt vector<int> cv; auto it1=v.begin(); //it1的类型是vector<int>::iterator auto it2=cv.begin(); //it2的类型是vector<int>::const_iterator
C++新标准引入了两个新函数,分别是cbegin和cend,不论对象本身是否是常量,返回值都是const_iterator.
(*it).men it->men //二者效果一样
标签:iter 函数返回 成员访问 其他 括号 const for语句 允许 ack
原文地址:https://www.cnblogs.com/ZhouYong1991/p/9438595.html