vector容器的使用

1 vector容器定义和初始化

1)除array容器外,其他容器(无论是顺序容器还是关联容器)都定义了默认构造函数,可以创建一个指定类型的空容器。

2)列表初始化指定了容器的每个元素的值和容器元素的个数。

3)将一个容器初始化为另一个容器的拷贝,两个容器的类型和其数据类型必须匹配。

4)除了3)中的容器拷贝方式,也可以传递两个迭代器参数来拷贝一个范围,这种拷贝方式不要求容器的类型相同甚至不要求元素的类型的相同,只要拷贝的元素类型可以转换为初始化容器元素的类型即可。

5)可以设置容器大小的初始化方式是顺序容器特有的。顺序容器提供一个接受容器大小和元素初始值(可选)作为参数的构造函数,如果不提供元素初始值,则元素按照值初始化的方式初始化。内置输出类型初始化为0,类类型按其默认构造函数进行初始化。

2 赋值与swap

 assign成员函数使得赋值的方式与初始化的方式一致,assign函数可以使不同但相容的类型赋值。

由于容器中的旧元素被替代,所以赋值前容器的迭代器不能再执行容器。

除array外,swap函数只是交换了两个容器的内部数据结构,元素本身并未交换,操作执行速度很快。虽然由于元素未被移动从而迭代器、指针和引用并未失效,但是这些元素已属于不同的容器了,但是对于string来说,swap调用后迭代器、指针和引用都会失效。

3 vector容器大小操作

4 vector支持的关系运算符

vector容器支持和内置类型一样的关系运算符,包括==、!=、>、>=、<、<=。运算符的比较方式和string的类似:

1)大小相等且元素对应相等,则容器相等;否则容器不等。

2)两个容器互不为前缀子序列,比较结果取决于第一个不相等的元素。

5 迭代器

1)迭代器范围

一个迭代器范围由一对迭代器表示,两个迭代器分别指向同一个容器中的元素和尾元素之后的位置(one past the last element)。这两个迭代器通常被称为begin和end。数学可描述为左闭合区间[begin, end)。

2)迭代器类型

vector容器定义了四种类型的迭代器,分别为iterator、const_iterator、reverse_iterator、const_reverse_iterator。还有返回迭代器类型的成员函数begin()/end()、cbegin()/cend()、rbegin()/rend()、crbegin()/crend()。其中反向迭代器reverse_iterator/const_reverse_iterator与正向迭代器相比,xbegin()返回的迭代器指向尾元素,xend()返回的迭代器指向首元素的前一个元素。

非常量成员函数begin()/rbegin()等返回的迭代器类型是否为常量类型取决于容器是否为常量类型。当时与const指针和引用类似,可以通过常量成员函数cbegin()/crbegin()等从非常量容器中返回常量迭代器类型。

vector容器迭代器支持的运算符有①*iter返回迭代器iter所指元素的引用;②iter->mem返回迭代器iter所指元素的成员;③++iter/--iter;④iter1 == iter2/iter1 != iter2;⑤iter - n/iter + n;⑥iter -= n/iter += n;⑦iter1 - iter2;⑧>/>=/</<=。

6 向vector容器添加元素

vector容器定义了两个函数实现添加元素的操作,分别为push_back()和insert(),其中insert()函数有多个重载版本。

1)insert(q, t),往迭代器q之前插入元素t,返回指向新添加元素的迭代器;

2)insert(q, n, t),往迭代器q之前插入n个t,返回指向新添加的第一个元素的迭代器;

3)insert(q, b, e),往迭代器q之前插入迭代器b、e指定范围的元素,b、e不能为执行本身元素的迭代器,返回指向新添加的第一个元素的迭代器;

4)insert(q, il),往迭代器q之前顺序插入元素值列表中的元素,返回新添加的第一个元素的迭代器;

因为push_back()和insert()在往容器中插入类类型时,会先创建一个临时对象再拷贝到容器中,这造成了空间和效率上的浪费,所以新标准还引入了emplace()和emplace_back()。它们可以先根据传入的参数类型(必须现有相应的构造函数)直接在容器管理的内存空间构造元素。

7 访问vector容器中的元素

上述四种操作返回的都是对应元素的引用,如果只是访问该元素,那么用auto变量和reference类型都可以,但是如果想改变执行元素的值则将变量定义为引用,如2)中所示。

1)front()函数返回容器首元素的引用。

2)back()函数返回容器尾元素的引用。

3)[n]返回容器中下标为n的元素的应用。

4)at(n)返回容器中下标为n的应用,如果n越界,那么会抛出out_of_range异常。

8 删除vector中的元素

1)pop_back()删除容器的尾元素。

2)erase(q)删除迭代器q指向的元素,返回指向删除元素后一个元素的迭代器。

3)erase(b, e)删除迭代器b、e指定范围的元素,返回指向最后一个删除元素后一个元素的迭代器。

4)clear()清空容器。

9 调整vector容器的大小

resize(n)调整容器大小为n,如果n小于当前容器大小,则删除多余元素,反之在尾元素后添加新元素并进行值初始化。resize(n, t)在调整容器大小上和resize(n)一样,但是新元素初始化为t。

该篇博客是自己的学习博客,水平有限,如果有哪里理解不对的地方,希望大家可以指正!

猜你喜欢

转载自www.cnblogs.com/zpchya/p/11098605.html