vector

//    vector<int> vec;

//    for(int i = 0; i < 10; i++)

//    {

//        vec.push_back(5);

//    }

//    

//    vector<int>::iterator itr;

//    

//    for(itr = vec.begin(); itr != vec.end();)

//    {

//        if(*itr == 5)

//        {

//            vec.erase(itr);

//        }

//        else

//        {

//            itr++;

//        }

//    }

//

//    for(int i = 0; i < vec.size(); i++)

//    {

//        cout << vec.at(i) << endl;

//    }

C++ Vector(向量容器)

是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩 展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数
组。

在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据 2

存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即 capacity ()函数的返回值。当存储的数据超过分配的空间时vector 会重新分配
一块内存块,但这样的分配是很耗时的,在重新分配空间时它会做这样的动作:

首先,vector 会申请一块更大的内存块;
然后,将原来的数据拷贝到新的内存块中; 其次,销毁掉原内存块中的对象(调用对象的析构函数); 最后,将原来的内存空间释放掉。

如果vector 保存的数据量很大时,这样的操作一定会导致糟糕的性能(这也
是vector 被设计成比较容易拷贝的值类型的原因)。所以说vector 不是在什么情
况下性能都好,只有在预先知道它大小的情况下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中插入元素则是线性时间复杂度。

1.Constructors 构造函数
vector<int> v1; //构造一个空的vector
vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector

2.Operators 对vector进行赋值或比较
C++ Vectors能够使用标准运算符: ==, !=, <=,
>=, <, 和 >. 要访问vector中的某特定位置的元素可以使用 [] 操作符. 两个vectors被认为是相等的,如果:
1.它们具有相同的容量
2.所有相同位置的元素相等. vectors之间大小的比较是按照词典规则.

3.assign() 对Vector中的元素赋值 语法:

void assign( input_iterator start, input_iterator end );
// 将区间[start, end)的元素赋到当前vector
void assign( size_type num, const TYPE &val );
// 赋num个值为val的元素到vector中,这个函数将会清除掉为vector赋值以前的内容.

3

4.at() 返回指定位置的元素 语法:

TYPE at( size_type loc );//差不多等同v[i];但比v[i]安全;
5.back() 返回最末一个元素
6.begin() 返回第一个元素的迭代器
7.capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下) 8.clear() 清空所有元素

9.empty() 判断Vector是否为空(返回true时为空)
10.end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)
11.erase() 删除指定元素

语法:
iterator erase( iterator loc );//删除loc处的元素
iterator erase( iterator start, iterator end );//删除start和end之间的元素

12.front() 返回第一个元素的引用 13.get_allocator() 返回vector的内存分配器 14.insert() 插入元素到Vector中

语法:

iterator insert( iterator loc, const TYPE &val ); //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
void insert( iterator loc, size_type num, const TYPE &val ); //在指定位置loc前插入num个值为val的元素
void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入区间[start,
end)的所有元素

15.max_size() 返回Vector所能容纳元素的最大数量(上限) 16.pop_back() 移除最后一个元素
17.push_back() 在Vector最后添加一个元素
18.rbegin() 返回Vector尾部的逆迭代器

19.rend() 返回Vector起始的逆迭代器 20.reserve() 设置Vector最小的元素容纳数量

//为当前vector预留至少共容纳size个元素的空间 21.resize() 改变Vector元素数量的大小

语法:
void resize( size_type size, TYPE val ); //改变当前vector的大小为size,且对新创建的元素赋值val

22.size() 返回Vector元素数量的大小 23.swap() 交换两个Vector

语法:

void swap( vector &from ); 

时间: 2024-10-24 19:22:28

vector的相关文章

java对象群体的组织:向量Vector

向量的功能: 1.能存储任意对象 2.不能存储基本类型的数据,如39,除非将这些数据包裹在包裹类中 3.其容量可以按需求自动扩充 4.若果不用扩充容量,增加元素方法的效率较高 方式: Vector myVector=new Vector() //初始容量为10 Vector myVector=new Vector(int cap) // 初始容量为cap Vector myVector=new Vector(Collection col) //使用集合col的元素初始化,若果col为数组,需要先

c++-vector iterator not dereferencable怎么处理啊

问题描述 vector iterator not dereferencable怎么处理啊 求解,下面这段代码是可以运行的,不过我把处理的数据换成 (IP (NP (NP (NP (CP (IP (VP (VV ()(NP (NR 法新社)(NR 伦敦) (NT 一日) (NN 电) (NN )) (NN 火星) (NN 探测)))))(NP (NN 计划)))(NP (NN 发言人)))(NP (NR 巴拉特)))(VP (VV 说) (PU ,)(IP (IP (VP (VV 一枚)(IP (

c++-C++ vector部分拷贝的问题

问题描述 C++ vector部分拷贝的问题 比如我有一个自定义类型vectorvector vec;现在要把这个vec根据 vec.size()/2 分成前半部分和后半部分进行处理分别将这两部分存入 vector left 和 vector right请问除了一个个元素push_back之外,有什么好方法吗? 解决方案 http://bbs.csdn.net/topics/110093248 解决方案二: vector可以直接根据iterator设置起始结尾位置来进行复制 解决方案三: 当然是

初始化的一些问题(Vector使用)

import java.util.Vector; import java.util.Iterator; import java.util.Arrays; import java.util.ArrayList; public class VectorDemo{ public static void main(String args[]){ String names[]={"hfdsfng", "zhfcinyafdn"}; String namesp[]=new St

C++中vector使用

(1)vector< 类型 > 标识符 ;(2)vector< 类型 > 标识符(最大容量) :(3)vector< 类型 > 标识符(最大容量,初始所有值):(4) int i[4] = {12,3,4,5};    vector< 类型 > vi(i , i+2); //得到i索引值为3以后的值 :   (5)vector< vector >   //vi 定义2维的容器:记得一定要有空格,不然会报错 1. 在C++中的详细说明 vector

C++ vector用法

在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.push_back(a); (4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的. (5)使用迭代器访问元素. vector<int>::iterator it; for(it=vec.begi

Java中vector理解2——vector和arrayList的区别

这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复.3个具体实现类的相关区别如下: ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制

Java的数组(Array)、Vector、ArrayList、HashMap的异同

数组   array(数组)和Vector是十分相似的Java构件(constructs),两者全然不同,在选择使用时应根据各自的功能来确定. 1.数组:Java arrays的元素个数不能下标越界,从很大程度上保证了Java程序的安全性,而其他一些语言出现这一问题时常导致灾难性的后果.        Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改变.值得注意的是:当Array中的某一元素存放的是Objrct reference 时,Java不会调用默认的构

Java程序的性能优化StringBuffer与Vector

程序|性能|优化 ? Java使得复杂应用的开发变得相对简单.毫无疑问,它的这种易用性对Java的大范围流行功不可没.然而,这种易用性实际上是一把双刃剑.一个设计良好的Java程序,性能表现往往不如一个同样设计良好的C++程序.在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身.养成好的代码编写习惯非常重要,比如正确地.巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能.下面我们就来具体地分析一下这方面的问题.

Vector在Java编程中的应用

编程 Vector 类提供了实现可增长数组的功能,随着更多元素加入其中,数组变的更大.在删除一些元素之后,数组变小.Vector 有三个构造函数,public Vector(int initialCapacity,int capacityIncrement) public Vector(int initialCapacity) public Vector() Vector 运行时创建一个初始的存储容量initialCapacity,存储容量是以capacityIncrement 变量定义的增量增