一.概述

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

二.特点

1) 指定一块如同数组一样的连续存储,但空间可以动态扩展。即它可以像数组一样操作,并且可以进行动态操作。通常体现在push_back() pop_back();

2) 随机访问方便,它像数组一样被访问,即支持[ ] 操作符和vector.at();

3) 节省空间,因为它是连续存储,在存储数据的区域都是没有被浪费的,但是要明确一点vector 大多情况下并不是满存的,在未存储的区域实际是浪费的;

4) 在内部进行插入、删除操作效率非常低,这样的操作基本上是被禁止的。Vector 被设计成只能在后端进行追加和删除操作,其原因是vector 内部的实现是按照顺序表的原理;

5) 只能在vector 的最后进行push 和pop ,不能在vector 的头进行push 和pop;

6) 当动态添加的数据超过vector 默认分配的大小时要进行内存的重新分配、拷贝与释放,这个操作非常消耗性能。 所以要vector 达到最优的性能,最好在创建vector 时就指定其空间大小;

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

三.常用API

Constructors 构造函数
Operators 对vector进行赋值或比较
assign() 对Vector中的元素赋值
at() 返回指定位置的元素
back() 返回最末一个元素
begin() 返回第一个元素的迭代器
capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)
clear() 清空所有元素
empty() 判断Vector是否为空(返回true时为空)
end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)
erase() 删除指定元素
front() 返回第一个元素
get_allocator() 返回vector的内存分配器
insert() 插入元素到Vector中
max_size() 返回Vector所能容纳元素的最大数量(上限)
pop_back() 移除最后一个元素
push_back() 在Vector最后添加一个元素
rbegin() 返回Vector尾部的逆迭代器
rend() 返回Vector起始的逆迭代器
reserve() 设置Vector最小的元素容纳数量
resize() 改变Vector元素数量的大小
size() 返回Vector元素数量的大小
swap() 交换两个Vector

四.示例Demo

#include <iostream>
#include <vector>
#include <stdlib.h> using namespace std; #pragma warning(disable:4996) struct Teacher {
char name[];
int age;
}; void printfV(vector<int> &c) { int size = c.size(); for (int i = ; i < size; i++)
{
cout << c[i] << endl;
}
} void printfPTeacher(vector<Teacher *> &c) { int size = c.size();
for (int i = ; i < size; i++)
{
cout << "name is:" << c[i]->name << ", age is:" << c[i]->age << endl;
} } void printfVTeacher(vector<Teacher> &c) { int size = c.size();
for (int i = ; i < size;i++) {
cout << "name is: " << c[i].name << ", age is: " << c[i].age << endl;
} } int main() { vector<int> v1(); for (int i = ; i < ; i++)
{
v1[i] = i + ;
} for (int i = ; i < ; i++)
{
cout << v1[i] << endl;
} printf("---------------------------------------\n"); vector<int> v2();
v2 = v1; printfV(v2); printf("---------------------------------------\n"); // vector 会把20个元素全部初始化为0
vector<int> v3();
v3.push_back();
v3.push_back(); printfV(v3);
printf("---------------------------------------\n"); vector<Teacher> v4();
Teacher t1, t2, t3;
t1.age = ;
t2.age = ;
t3.age = ; strcpy(t1.name,"Tom");
strcpy(t2.name,"Jack");
strcpy(t3.name,"Mike"); v4[] = t1;
v4[] = t2;
v4[] = t3; printfVTeacher(v4); printf("---------------------------------------\n"); vector<Teacher *> v5();
Teacher *p1 = (Teacher *)malloc(sizeof(Teacher));
p1->age = ;
strcpy(p1->name,"Person1"); Teacher *p2 = (Teacher *)malloc(sizeof(Teacher));
p2->age = ;
strcpy(p2->name, "Person2"); Teacher *p3 = (Teacher *)malloc(sizeof(Teacher));
p3->age = ;
strcpy(p3->name, "Person3"); v5[] = p1;
v5[] = p2;
v5[] = p3; printfPTeacher(v5); system("pause"); return ; }

运行结果:

---------------------------------------

---------------------------------------

---------------------------------------
name is: Tom, age is: 11
name is: Jack, age is: 22
name is: Mike, age is: 33
---------------------------------------
name is:Person1, age is:111
name is:Person2, age is:222
name is:Person3, age is:222

1.Vector(向量容器)的更多相关文章

  1. 学习笔记之vector向量容器

    今天复习到vector向量容器,里面包括vector向量容器的一些优点以及具体的使用方法及代码,分享给大家. Vector向量容器不但能够像数组一样对元素进行随机访问,还可以在尾部插入元素,是一种简单 ...

  2. vector向量容器(常用的使用方法总结)

    关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...

  3. vector向量容器

    vector向量容器不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,可以代替数组. vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的调整所占内存. ...

  4. 标准模板库使用参考——vector向量容器

    C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,ST ...

  5. vector向量容器元素排序与查找

    1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector> vector<int> ...

  6. C++STL之vector向量容器

    vector向量容器   vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...

  7. 利用copy函数简单快速输出/保存vector向量容器中的数据

    如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...

  8. vector 向量容器用法祥解

    vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法:         ...

  9. C++ STL vector(向量容器)的使用(附完整程序代码)

    一.简单介绍 Vectors 包括着一系列连续存储的元素,其行为和数组类似. 訪问Vector中的随意元素或从末尾加入元素都能够在O(1)内完毕,而查找特定值的元素所处的位置或是在Vector中插入元 ...

  10. vector向量容器的一些基本操作

    #include <vector> #include <iostream> using namespace std; void print(vector<int>& ...

随机推荐

  1. easyui-combobox绑定回车事件注意事项

    回车事件的定义的位置必须是easyui-combobox数据加载的后面,才有效果. HTML文件: <select id="aucBrandNo" class="e ...

  2. js中几种常见的方法的实例 shift,unshift,push,prop

    1.shift()定义和用法 shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值. 语法:arrayObject.shift() 返回值:数组原来的第一个元素的值. 说明:如果 ...

  3. [Linux] ubuntu 软件安装必须看的网址

    http://wiki.ubuntu.org.cn/index.php?title=Qref/Apps&variant=zh-hans 这里介绍了unbuntu常用软件及其安装,免得你百度来百 ...

  4. SQL 之 Group By

    SQL 之 Group By Group By从字面意义上理解就是根据By指定的规则对数据进行分组,所谓的分组就是将一个数据表划分成若干个小区域. 例如:有这么一张表

  5. KL变换和PCA的数学推导

    一些推导的笔记 上面分解成无穷维,大多数时候都不是的吧... 这里的d有限维,应该是指相对小于上面的分解的维度的某个数 参考资料 参考资料,上面是从最小化损失的角度,利用拉格朗日对偶的优化方法求解 p ...

  6. 新型数据库Kudu应用经验分享

    小米使用kudu的案例 http://www.aiweibang.com/yuedu/60603532.html 调研kudu的情况

  7. 转:超实用的IOS 9人机界面指南(1):UI设计基础 (腾讯力作)

    转: http://www.uisdc.com/ios9-interface-guideline-ui

  8. Jenkins +JUnit

    转载:https://www.cnblogs.com/helloIT/p/5761740.html 1.环境 windows10 专业版 Jenkins 2.7 apache-ant-1.9.6 JD ...

  9. java实现快速排序算法

    1.算法概念. 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.2.算法思想. 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据 ...

  10. 适合移动手机使用的js环形菜单特效插件

    blooming-menu是一款适合在移动手机上使用的js环形菜单插件.该环形菜单提供了众多的參数,通过结合CSS3动画制作出效果很炫酷的圆形菜单展开和隐藏动画效果. 以下是这个圆形菜单菜价的可用參数 ...