今天读了Scott Meyers的Effctive C++中的第一节,才发现自己原来学习C++的那些东西到底属于哪部分了。原来庞大的C++其实也只分为4部分,分别为:C、Object-Oriented(面向对象)、Template、STL。其中,STL由3大块组成:容器、迭代器、算法(泛型算法)。学习任何语言之前,一定要先对其有个宏观方向的把握,要明白自己目前阶段学的东西到底是些什么、有什么用,这样学起来就有方向感了,不会迷茫了。 刚刚看了有关vector的一些基础知识,记录在这里,方便日后查看。
1、容器是特定类型对象的集合。
2、将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这些元素在容器中的排列次序由将它们push_back到容器里面的先后次序来决定。
3、一些最最基本的操作:
定义对象:vector<T> vec1;
vector<T> vec2(vec1);
vector<T> vec3(n,i);
vector<T> vec4(n);
基本操作:vec.empty();
vec.size();
vec.push_back();
vec[n];//访问第n个元素
vec1=vec2;//赋值
4、vector<int> vec;//定义一个空的vec容器,存放int对象
下面的这个操作是错误的:
for(vector<int>::size_type ix=0;ix!=10ix++)
vec[ix]=ix;//试图在vec中插入10个元素,但是这里的vec压根儿就是一个空的容器,vec里面不存在任何元素,对vec使用下标操作是严重错误的。
请记住:对vec进行下标操作,只能用于获取已经存在的元素,也起不到插入元素的作用。
5、关于两个迭代器
1)const vector<int>::iterator iter1=vec.begin();//iter1是一个const迭代器,其自身的值不能改变,但其指向的元素的值可以改变。
2)vector<int>::const_iterator iter2=vec.begin();//iter2是一个指向const对象的迭代器,其自身的值可以改变,但其指向的元素的值不能改变。
3)对于const vector<int> vec(10,0);//定义一个const容器,容器中的元素的值不能改变
const vector<int>::iterator iter1=vec.begin();//error!!!!!!!
vector<int>::const_iterator iter2=vec.begin();//ok!