STL中vector的初始化

vector可用于代替C++中的数组,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,STL中向量是使用数组实现的,因此向量具有顺序表的特点,可以快速随机存取数据。向量是一种数据类型的对象的集合,每个对象根据其位置有一个整数索引值与其对应,类似于数组。

使用向量之前,必须包含相应的头文件:

#include<vector>
using std::vector

同时也应当注意,vector是一个模板类,而非数据类型。所以在定义对象时必须说明vector保存的对象类型。以下给出一些初始化的例子:

1 vector<int>  v;   //定义向量对象
2 vector<int>  v(v1);   //定义向量对象v,并且用v1初始化
3 vector<int>  v2(n,i);   //定义向量对象v2,包含了n个值为i的元素
4 vector<int>  v3(n);   //定义向量对象v3,其中包含了n个元素值为0的元素

接着介绍一种使用数组初始化向量元素的方式,这种方式在刷题时非常常见,有必要掌握:

 1 #include "stdafx.h"
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <iostream>
 5 #include <vector>
 6 #include <algorithm>
 7 using namespace std;
 8 class Solution {
 9 public:
10     int arrayPairSum(vector<int>& nums) {
11         int res = 0;
12         vector<int>::size_type nsize = nums.size();
13         sort(nums.begin(), nums.end());
14         for (int i = 0; i<nsize; i += 2) {
15             res += nums[i];
16         }
17         return res;
18     }
19 };
20 int main()
21 {
22     Solution a;
23     int num[4] = { 1, 4, 3, 2 };
24     int numLength = sizeof(num) / sizeof(num[0]);
25     vector<int> nums(num, num + numLength);  //使用数组初始化向量
26     for (vector<int>::iterator it = nums.begin(); it != nums.end(); it++)  //使用迭代器访问向量元素
27         cout << *it << "  ";
28     cout << endl;
29     //cout << a.arrayPairSum(nums) << endl;
30     return 0;
31
32 }

这里有两点需要说明:1、迭代器类似于指针,可以用迭代器访问向量中相应的元素;2、nums.begin()表示迭代器指向nums的第一个元素,但是nums.end()则表示迭代器指向nums最后一个元素的下一个元素,实际上是不对应数值的,在使用时要多加小心。

vector的使用其实还可以调用一些常用的借口,比如insert,push_back之类的,vector的接口使用说明参见:

http://www.cplusplus.com/reference/vector/vector/?kw=vector

在此不再赘述。

时间: 2024-11-06 07:19:30

STL中vector的初始化的相关文章

C++的STL中vector内存分配方法的简单探索

STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux  CentOS 5.2 1.代码 #include <vector> #include <stdio.h> using namespace std; int main() { vector<int> x_vec; printf("data size : [%3d], mem size : [%3d]\n", x_vec.size(), x_vec.capacity())

C++ STL中vector(向量容器)使用简单介绍

原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相当于数组,但其大小可以不预先指定,并且自动扩展.它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组,或者作为动态内存. 在创建一个vector 后,它会自动在内存中分配一块连续的内存空间进行数据存储,初始的空间大小可以预先指定也可以由vector 默认指定,这个大小即cap

STL中 vector 和 list 一些特性

STL中的vector特点是: 其容量在需要时可以自动分配,本质上是数组形式的存储方式.即在索引可以在常数时间内完成.缺点是在插入或者删除一项时,需要线性时间.但是在尾部插入或者删除,是常数时间的. STL的 list 是双向链表:如果知道位置,在其中进行插入和删除操作时,是常数时间的.索引则需要线性时间(和单链表一样). 以下是vector和list中常用的方法: int size() const  ;  返回容器内所有元素的个数. void  clear()  ;    删除容器中所有元素.

C++/STL中 vector中对 “=”赋值运算符的支持

由于好奇STL中的vector 对于自定义数据类型的 " = "(赋值运算符的)支持,谢了一段简单的测试代码进行测试. 结果证明vector对于赋值预算符支持良好,但是对于动态分配的类构成的vector数组, 博主认为一定要重写析构函数与复制构造函数以及运算符重载"="运算符(这是一条软件规则,详见博主测试),链接如下: http://blog.csdn.net/u010003835/article/details/47314811 测试代码: #include &

STL中vector的用法

vector应该是STL种最常用的容器了,可以当做数组来看待,只不过vector的元素更丰富,不仅仅是数据元素,还可以是结构体 1.vector的创建和初始化 vector <double> v;//创建一个double类型的vector vector <int> v2(5);//创建一个含有5个元素的int型vector,初始值默认为0 vector <int> v3(4,7);//创建一个含有4个元素的int型vector,初始值都为7 当然也可以通过在尾部添加元素

[转]STL中vector转数组(实际是数组的指针)

感谢:http://topic.csdn.net/t/20050429/20/3976956.html 感谢:http://yzyanchao.blogbus.com/logs/47796444.html 不过那边是转载自<effective stl>. std::vector很方便,但有时调用的函数的参数规定是数组,需要将vector转为数组,另外开辟一个空间,将vector一项项复制过去代价过大,可用下面的方法. 给定一个 vector<int>   v;         表达

C/C++知识要点2——STL中Vector、Map、Set容器的实现原理

1.Vector是顺序容器,是一个动态数组,支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自动分配空间,增加为原来的两倍.vector随机存取效率高,但是在vector插入元素,需要移动的数目多,效率低下. 注意:vector动态增加大小时,并不是在原空间之后持续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间.因此,对vector的任何操作,一

STL中vector,Map,Set的实现原理

vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统.但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必因为害怕空间不足而一开始要求一个大块头的array了,我们可以安心使用vector,随便使用多

C++ STL中vector的内存机制和性能分析

vecotr是动态数组,顾名思义他可以动态的增加自己的长度. 内存机制: 但是怎样的增加自己的长度? vector有两个函数一个是capacity()返回内存空间即缓冲区的大小,另一个是size()返回当前数组中数的数量.vector增加元素来说,当容量已经不能放进数据了,那么他会重新申请一块内存,把之前的内存利用复制构造函数复制到新的内存当中,然后把新添加的内容放入后面,另外此时的他申请的内存空间是原来空间的2倍,我测得是2倍 缓冲区的释放 vecotor占用的内存只增不减,erase只是将一