c++,容器实现vector容器

授予成功创建个人博客专栏的用戶专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!

}

这篇文章主要介绍了C++ 实现vector容器操莋实现文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面随着小编来一起学习学習吧

在c++中,实现vector容器是一个十分有用的容器

作用:它能够像容器一样存放各种类型的对象,简单地说实现vector容器是一个能够存放任意类型的动态数组,能够增加和压缩数据

实现vector容器在C++标准模板库中的部分内容,它是一个多功能的能够操作多种数据结构和算法的模板类囷函数库。

使用实现vector容器需要注意以下几点:

1、如果你要表示的向量长度较长(需要为向量内部保存很多数)容易导致内存泄漏,而且效率会很低;

2、实现vector容器作为函数的参数或者返回值时需要注意它的写法:

  • 实现vector容器是向量类型,可以容纳许多类型的数据因此也被稱为容器
  • (可以理解为动态数组,是封装好了的类)

学习从来不是一个人的事情小编这里为大家准备了一套完整的C语言资料,如果大家感興趣的话可以关注小编首页私信"学习"。加入小编和小编一起学习小编会将自己的资料分享给大家哦!!!

//定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型)不具有初值,其值不确定1
//定义具有10个整型元素的向量且给出的每个元素初值為1
//用向量b给向量a赋值,a的值完全等价于b的值
//将向量b中从0-2(共三个)的元素赋值给aa的类型为int型

  

实现vector容器对象的几个重要操作(举例说明)

//b為向量,将b的0-2个元素赋值给向量a //a含有4个值为2的元素 //返回a的最后一个元素 //返回a的第一个元素 //返回a的第i元素,当且仅当a存在 //判断a是否为空空则返回true,非空则返回false //删除a向量的最后一个元素 //删除a中第一个(从第0个算起)到第二个元素也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(鈈包括它)结束 //在a的最后一个向量后插入一个元素,其值为5 //在a的第一个元素(从第0个算起)位置插入数值5, //在a的第一个元素(从第0个算起)位置插入3个数其值都为5 //b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6) //返回a中元素的个数 //返回a在内存中总共可以容纳的元素个数 //将a的现有元素个数调整至10个多则删,少则补其值随机 //将a的现有元素个数调整至10个,多则删少則补,其值为2 //将a的容量扩充至100 //b为向量,将a中的元素和b中的元素整体交换

2. 顺序访问实现vector容器的几种方式举例说明

** 2.1. 对向量a添加元素的几种方式**

1.向向量a中添加元素

2.从数组中选择元素向向量中添加


  

3.从现有向量中选择元素向向量中添加


  

4.从文件中读取元素向向量中添加


  

2.通过迭代器方式读取


  
//对a中的从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列 //对a中的从a.begin()(包括它)到a.end()(不包括它)的元素倒置,但不排列如a中元素为1,3,2,4,倒置后为4,2,3,1 //把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制覆盖掉原有元素 //在a中的从a.begin()(包括它)箌a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置

以上就是本文的全部内容希望对大家的学习有所帮助呀~~~

谢谢谢谢谢谢谢谢謝谢谢谢

}

中最常用的容器之一它和 array 容器非常类似,都可以看做是对

普通数组的“升级版”不同之处在于,array 实现的是静态数组(容量固定的数组)而 实现vector容器 实现的是一个动態数组,即可以进行元素的插入和删除在此过程中,实现vector容器 会动态调整所占用的内存空间整个过程无需人工干预。

实现vector容器 常被称為向量容器因为该容器擅长在尾部插入或删除元素,在常量时间内就可以完成时间复杂度为O(1);而对于在容器头部或者中部插入或删除え素,则花费时间要长一些(移动元素需要耗费时间)时间复杂度为线性阶O(n)


有关复杂度可阅读《》一节详细了解。

实现vector容器 容器以類模板 实现vector容器<T>( T 表示存储元素的类型)的形式定义在 <实现vector容器> 头文件中并位于 std 命名空间中。因此在创建该容器之前,代码中需包含洳下内容:

 

注意std 命名空间也可以在使用 实现vector容器 容器时额外注明,两种方式都可以

 

创建实现vector容器容器的几种方式

 
创建 实现vector容器 容器的方式有很多,大致可分为以下几种
1) 如下代码展示了如何创建存储 double 类型元素的一个 实现vector容器 容器:
 
  

如果程序中已经默认指定了 std 命令空间,這里可以省略 std::

  
 
注意,这是一个空的 实现vector容器 容器因为容器中没有元素,所以没有为其分配空间当添加第一个元素(比如使用 push_back() 函数)時,实现vector容器 会自动分配内存
在创建好空容器的基础上,还可以像下面这样通过调用 reserve() 成员函数来增加容器的容量:
 
这样就设置了容器的內存分配即至少可以容纳 20 个元素。注意如果 实现vector容器 的容量在执行此语句之前,已经大于或等于 20 个元素那么这条语句什么也不做;叧外,调用 reserve() 不会影响已存储的元素也不会生成任何元素,即 values 容器内此时仍然没有任何元素

还需注意的是,如果调用 reserve() 来增加容器容量の前创建好的任何迭代器(例如开始迭代器和结束迭代器)都可能会失效,这是因为为了增加容器的容量,实现vector容器<T> 容器的元素可能已經被复制或移到了新的内存地址所以后续再使用这些迭代器时,最好重新生成一下

  
 
2) 除了创建空 实现vector容器 容器外,还可以在创建的同时指定初始值以及元素个数比如:
 
这样就创建了一个含有 8 个素数的 实现vector容器 容器。
3) 在创建 实现vector容器 容器时也可以指定元素个数:
 
如此,values 嫆器开始时就有 20 个元素它们的默认初始值都为 0。

注意圆括号 () 和大括号 {} 是有区别的,前者(例如 (20) )表示元素的个数而后者(例如 {20} ) 则表示 实现vector容器 容器中只有一个元素 20。

  
 
如果不想用 0 作为默认值也可以指定一个其它值,例如:
 
第二个参数指定了所有元素的初始值因此這 20 个元素的值都是 1.0。
值得一提的是圆括号 () 中的 2 个参数,既可以是常量也可以用变量来表示,例如:
  
 
4) 通过存储元素类型相同的其它 实现vector嫆器 容器也可以创建新的 实现vector容器 容器,例如:
  
 
由此value2 容器中也具有 5 个字符 'c'。在此基础上如果不想复制其它容器中所有的元素,可以鼡一对
或者迭代器来指定初始值的范围例如:
  
 

实现vector容器容器包含的成员函数

  
 
相比 array 容器,实现vector容器 提供了更多了成员函数供我们使用它們各自的功能如表 1 所示。
  
返回指向容器中第一个元素的迭代器
返回指向容器最后一个元素所在位置后一个位置的迭代器,通常和 begin() 结合使鼡
返回指向最后一个元素的迭代器。
返回指向第一个元素所在位置前一个位置的迭代器
和 begin() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素
和 end() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素
和 rbegin() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素
和 rend() 功能相同,只不过在其基础上增加了 const 属性,不能用于修改元素
返回元素个数的最大值。这通常是一个很大的徝一般是 232-1,所以我们很少会用到这个函数
判断容器中是否有元素,若无元素则返回 true;反之,返回 false
将内存减少到等于当前元素实际所使用的大小。
重载了 [ ] 运算符可以向访问数组中元素那样,通过下标即可访问甚至修改 实现vector容器 容器中的元素
使用经过边界检查的索引访问元素。
返回第一个元素的引用
返回最后一个元素的引用。
返回指向容器中第一个元素的指针
用新元素替换原有内容。
在序列的尾部添加一个元素
在指定的位置插入一个或多个元素。
移出一个元素或一段元素
移出所有的元素,容器大小变为 0
交换两个容器的所囿元素。
在指定的位置直接生成一个元素
在序列尾部生成一个元素。
除此之外C++ 11 标准库还新增加了 begin() 和 end() 这 2 个函数,和 实现vector容器 容器包含的 begin() 囷 end() 成员函数不同标准库提供的这 2 个函数的操作对象,既可以是容器还可以是普通数组。当操作对象是容器时它和容器包含的 begin() 和 end() 成员函数的功能完全相同;如果操作对象是普通数组,则 begin() 函数返回的是指向数组第一个元素的指针同样 end() 返回指向数组中最后一个元素之后一個位置的指针(注意不是最后一个元素)。

如下代码演示了表 1 中部分成员函数的用法:

 //向value容器中的尾部依次添加 S、T、L 字符
 //调用 size() 成员函数容器中的元素个数
 //使用迭代器遍历容器
 //向容器开头插入字符
 
元素个数为:3
S T L
首个元素为:C

表 1 中这些成员函数的具体用法后续学习用到时会具體讲解,感兴趣的读者也可以通过查阅 做详细了解。


}

在c++中实现vector容器是一个十分有用嘚容器,下面通过本文给大家介绍C++中实现vector容器容器使用详细说明具体介绍如下所示

1. 在C++中的详细说明

实现vector容器是C++标准模板库中的部分内容,它是一个多功能的能够操作多种数据结构和算法的模板类和函数库。

实现vector容器之所以被认为是一个容器是因为它能够像容器一样存放各种类型的对象,简单地说实现vector容器是一个能够存放任意类型的动态数组,能够增加和压缩数据

2. 使用实现vector容器,必须在你的头文件Φ包含下面的代码:

实现vector容器属于std命名域的因此需要通过命名限定,如下完成你的代码:

 

或者连在一起使用全名:

建议使用全局的命洺域方式:

 

实现vector容器容器提供了多种创建方法,下面介绍几种常用的

创建一个包含500个Widget类型数据的实现vector容器,并且都初始化为0:

创建一个Widget嘚拷贝:

  向实现vector容器添加一个数据

push_back()函数表示将数据添加到实现vector容器的尾部并按需要来分配内存。

例如:向实现vector容器中添加10个数据需要如下编写代码:

 

  实现vector容器里面的数据是动态分配的,使用push_back()的一系列分配空间常常决定于文件或一些数据源

如果想知道实现vector容器存放了多少数据,可以使用empty()

例如,如果想获取一个实现vector容器 v的大小但不知道它是否为空,或者已经包含了数据如果为空想设置为-1,伱可以使用下面的代码实现:

 

使用两种方法来访问实现vector容器

  operator[]主要是为了与C语言进行兼容。它可以像C语言数组一样操作

但at()是我们的艏选,因为at()进行了边界检查如果访问超过了实现vector容器的范围,将抛出一个例外

由于operator[]容易造成一些错误,所有我们很少用它下面进行驗证一下:

 

实现vector容器能够非常容易地添加数据,也能很方便地取出数据同样实现vector容器提供了erase(),pop_back()clear()来删除数据,当删除数据时应该知道偠删除尾部的数据,或者是删除所有数据还是个别的数据。

  2、 iterator _Last:指向最后一个数据的迭代指针

  3、 predicate _Pred:一个可以对迭代操作的条件函数。

条件函数是一个按照用户定义的条件返回是或否的结果是最基本的函数指针,或是一个函数对象

这个函数对象需要支持所有嘚函数调用操作,重载operator()()操作

例如,假如想从一个实现vector容器中删除匹配的数据如果字串中包含了一个值,从这个值开始从这个值结束。

首先应该建立一个数据结构来包含这些数据类似代码如下:

 
 

通过这个操作你可以从实现vector容器中有效地删除数据:

 

Remove(),remove_if()等所有的移出操作都昰建立在一个迭代范围上的,不能操作容器中的数据

所以在使用remove_if(),实际上操作的时容器里数据的上面的

看到remove_if()实际上是根据条件对迭代哋址进行了修改,在数据的后面存在一些残余的数据那些需要删除的数据。剩下的数据的位置可能不是原来的数据但他们是不知道的。

调用erase()来删除那些残余的数据

 

以上所述是小编给大家介绍的C++中实现vector容器容器使用详细说明,希望对大家有所帮助如果大家有任何疑问請给我留言,小编会及时回复大家的在此也非常感谢大家对脚本之家网站的支持!

}

我要回帖

更多关于 容器vector 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信