C++标准库学习之Vector

By | 07月14日
Advertisement

C++标准库学习之Vector
Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。 #include<vector>

1、构造函数:
C++ Vectors可以使用以下任意一种参数方式构造:
无参数 - 构造一个空的vector : vector()
数量(num)和值(val) - 构造一个初始放入num个值为val的元素的Vector : vector(size_type num, const TYPE &val)
vector(from) - 构造一个与vector from 相同的vector : vector(const vector& from)
迭代器(start)和迭代器(end) - 构造一个初始值为[start,end)区间元素的Vector(注:半开区间) : vector(input_iterator start, input_iterator end)

2、对vector进行赋值或比较
C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和 >. 要访问vector中的某特定位置的元素可以使用 [] 操作符.
两个vectors被认为是相等的,如果:
它们具有相同的容量
所有相同位置的元素相等.
vectors之间大小的比较是按照词典规则.
语法:
v1 == v2
v1 != v2
v1 <= v2
v1 >= v2
v1 < v2
v1 > v2
v[]
注:不得不承认,从来没留意vector还有这个功能,C++果然强大

3、对Vector中的元素赋值
assign() 函数要么将区间[start, end)的元素赋到当前vector,或者赋num个值为val的元素到vector中.这个函数将会清除掉为vector赋值以前的内容.
语法:
void assign( input_iterator start, input_iterator end );
void assign( size_type num, const TYPE &val );

4、取得指定位置的函数:
TYPE at( size_type loc ),注意[]运算符也能实现同样功能,但是at()函数比[]运算符安全

5、 iterator begin():返回一个指向当前vector起始元素的迭代器
iterator end():返回一个指向当前vector末尾元素的下一位置的迭代器.
rbegin() 返回Vector尾部的逆迭代器
rend() 返回Vector起始的逆迭代器
注:迭代器的种类真多,很有必要对这些种类进行归纳总结啊!

6、 TYPE back():返回当前vector最末一个元素的引用
TYPE front():返回当前vector起始元素的引用

7、删除函数:
erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素.返回值是指向删除的最后一个元素的下一位置的迭代器.
语法:
iterator erase( iterator loc );
iterator erase( iterator start, iterator end );

8、插入元素到Vector中
insert() 函数有以下三种用法:
1)、在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
2)、在指定位置loc前插入num个值为val的元素
3)、在指定位置loc前插入区间[start, end)的所有元素 .
语法:
iterator insert( iterator loc, const TYPE &val );
void insert( iterator loc, size_type num, const TYPE &val );
void insert( iterator loc, input_iterator start, input_iterator end );

9、pop_back() 移除最后一个元素
push_back() 在Vector最后添加一个元素

10、返回vector的内存分配器:
allocator_type get_allocator();
注:什么是内存分配器?

11、其他一些常用的函数:
void reserve( size_type size ):为当前vector预留至少共容纳size个元素的空间.(注:感觉没啥作用)
max_size() 返回Vector所能容纳元素的最大数量(上限 )
capacity():返回当前vector在重新进行内存分配以前所能容纳的元素数量.

clear() 清空所有元素
empty() 判断Vector是否为空(返回true时为空)
size() 返回Vector元素数量的大小
void resize( size_type size, TYPE val ):改变当前vector的大小为size,且对新创建的元素赋值val
void swap( vector &from ):交换当前vector与vector from的元素

Similar Posts:

  • C++学习笔记--标准库类型(vector,iterator,bitset)(一)

    发现以前本科的C++课程只是介绍了一些基本的知识,趁着去实习之间的空档,补充一下自己的基本知识. Vector(容器)是同一种类型的对象的集合,每一个对象都有对应的整数索引值.和string对象一样,标准库将负责管理与存储元素相关的内存. Vector的头文件声明: #include<vector> using std::vector; 定义和初始化:构造函数 1,vector<T> V1 2,vactor<T> V2(V1),V2为V1的一个副本 3,vector&l

  • c++ 学习笔记第三章(标准库类型(vector))

    一.vector使用 头文件:#include using std::vector; vector是一个类模版,而不是具体的类型.通过将类型放在类模版的里面,来指定类型. 如:vector ivec; //类型:vector,变量名:ivec vector Sales_vec; 二.vector对象的定义和初始化 初始化vector vector v1; vector保存类型为T对象. vector v1(v2); v2是v1的一个副本.v3包含 vector v3(n,i); v3包含n个值为

  • python标准库学习4-time

    time模块可以实现:获取当前时间,操作时间,日期,从字符串读取时间以及格式化时间为字符串. >>> dir(time) ['__doc__', '__name__', '__package__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'lo caltime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_tim

  • C标准库学习tim.h

    <time.h> NULL Null pointer constant. clock_t //一个描述时间流逝的数学类型long An arithmetic type elapsed processor representing time. time_t An arithmetic type representing calendar time. 描述日历时间的类型long, 表示从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数 struct tm // 描述日历时间组成部分的

  • 标准库学习中的基础知识(二)

    P298 "对于大多数人,首先得和最明显的应用就是定义和使用容器类." "在调用模板函数时,函数参数的类型决定了到底应该使用哪个版本,也就是说,模板的参数是由函数推断出来的." P299 "对于一个调用,能从函数的参数推断出模板参数的能力是其中最关键的东西." "编译器能从一个调用推断出类型参数和非类型参数,条件是:由这个调用的函数参数能够唯一的标识出模板参数的一个集合. 例如:template<class T , int i&g

  • 发布一个stl标准库容器类(vector/list)的安全删除方法

    话不多说,看代码. #include <functional> #ifndef ASSERT #include <cassert> #define ASSERT assert #endif /** * 释放对象列表 * @param items 对象列表 * @return */ template<typename array> void zero_array(array& items) { ASSERT(!items.empty()); if (!items.

  • python标准库学习—bisect模块

    bisect模块可以使列表保持已排好的顺序,使用二分算法. bisect(list,item,[low,[high]]) 返回要插入item点的索引,如果item在列表中了,则返回该条目的右边索引 bisect_right(list,iten,[left,[right]]) 同上 bisect_left(list,iten,[left,[right]]) 返回要插入item点的索引,如果item在列表中了,则返回该条目的左边索引 insort(list,item,[left,[right]])

  • C标准库学习stdio.h

    <stdio.h> ... typedef struct { char *a0; /* pointer to first homed integer argument */ int offset; /* byte offset of next parameter */ } va_list; #define BUFSIZ 4096 /* * Default number of supported streams. _NFILE is confusing and obsolete, but * s

  • Python标准库学习笔记 urllib模块

    利用缓存实现简单的获取 import urllib import os def reporthook(blocks_read,block_size,total_size): if not blocks_read: print 'Connection opened' return if total_size < 0: print 'Read %d blocks ( %d bytes ) '%(blocks_read,blocks_read*block_size) else: amount_read

  • C++ Primer 学习笔记——第3章:标准库类型 vector

    C++ Primer 学习笔记-- 第3章:标准库类型 vector 声明部分 见<3.3 标准库Vector类型> vector本身必须加 #include <vector> using std::vector; 否则vector不能用. 此外,为了用输出,像cout << *P << endl,还要加 #include <iostream> using namespace std; 合起来就是 #include <iostream>

Tags: