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

当然也可以通过在尾部添加元素来初始化

vector <double> v;
v.push_back(3.5);
v.push_back(4.9);
v.push_back(1.5);//其中v[0] = 3.5 v[1] = 4.9 v[2] = 1.5

2、vector的元素遍历

vector <double> v;
v.push_back(3.5);
v.push_back(4.9);
v.push_back(1.5);
//下标访问
for(int i = 0; i < v.size();i++)
{
	cout << v[i] << endl;
}
//const迭代器访问
for(vector <double>::const_iterator it = v.begin(); it !=v.end();it++)
{
	cout << *it << endl;
}
//非const迭代器访问
for(vector <double>::iterator it = v.begin(); it !=v.end();it++)
{
	cout << *it << endl;
}
//逆序访问,同样分为const和非const
for(vector <double>::reverse_iterator it = v.rbegin(); it !=v.rend();it++)
{
	cout << *it << endl;
}

说明一下,其中的const和非const迭代器在访问元素时没有区别,只是非const迭代器可以通过*it = value来改变vector元素的值

3、vector的插入操作

v.insert(v.begin()+2,5); //在索引为2(从0开始)的位置插入元素5
v.insert(v.begin(),2,3);//在索引为0的位置插入2个值为3的元素

4、vector的删除

v.erase(v.begin()+i);//删除索引为i的元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
vec.clear();//删除所有元素

举个例子,删除double类型的vector中与指定值key相等的元素

vector <double> v;
v.push_back(3.5);
v.push_back(4.9);
v.push_back(1.5);
v.push_back(3.5);
v.push_back(3.5);
v.push_back(4.9);
v.push_back(3.5);
double key = 3.5;
const double MIN = 0.00000001;
//索引删除
for(int i =0; i<v.size();i++)
{
	if((v[i] - key < MIN) && (v[i] -key > -MIN)) //double类型,需要定义一个精度
	{
		v.erase(v.begin()+i);
		i--;//假设[2,3,4]删除元素3,其索引为2,删除3后,元素4成了索引2对应的值,所以减一
		cnt++;
	}
}
//或者用迭代器删除
for(it = v.begin();it != v.end();)
{

	if((*it - key < MIN) && (*it -key > -MIN))
	{
		it = v.erase(it); //删除函数返回的是下一个元素的迭代器
		cnt++;
	}
	else
	{
		it++;
	}	

}

  5、

原文地址:https://www.cnblogs.com/xqn2017/p/9152537.html

时间: 2024-08-11 22:13:22

STL中vector的用法的相关文章

c++中vector的用法详解

c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std; 2.变量声明: 2.1 例:声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个

(转)STL中set的用法

转载自here 1.关于set map容器是键-值对的集合,好比以人名为键的地址和电话号码.相反地,set容器只是单纯的键的集合.例如,某公司可能定义了一个名为bad_checks的set容器,用于记录曾经给本公司发空头支票的客户.当想知道一个值是否存在时,使用set容器是最适合的.除了两种例外情况,set容器支持大部分的map操作,这两种例外是:set不支持下标操作,而且也没有mapped_type类型,在set容器中,value_type不是pair类型,而是与key_type相同的类型.它

STL中mem_fun, mem_fun_ref用法

1.引言 先看一个STL中for_each的用法: 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <functional> 5 #include <iterator> 6 using namespace std; 7 class Test 8 { 9 public: 10 Test(int _data = 0):data(_data){} 1

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中list的用法

博客搬家啦http://t.cn/RvFZs2c STL中list的用法 C++ Lists(链表) 赋值(assign) 语法: void assign( input_iterator start, input_iterator end ); void assign( size_type num, const TYPE &val ); assign()函数以迭代器start和end指示的范围为list赋值或者为list赋值num个以val为值的元素. 相关主题: insert(), back

c++ STL库 vector 结构用法简介

STL是什么就不介绍了,这里主要介绍库中vector的常用用法方便以后查阅. Vector成员函数 函数 表述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中的数据赋值给c. 将n个elem的拷贝赋值给c. c.at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range. c.back() 传回最后一个数据,不检查这个数据是否存在. c.begin() 传回迭代器重的可一个数据. c.capacity() 返回容器中

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

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

STL中map的用法

map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一

STL中vector的初始化

vector可用于代替C++中的数组,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性.而且vector是STL推荐使用的默认容器,STL中向量是使用数组实现的,因此向量具有顺序表的特点,可以快速随机存取数据.向量是一种数据类型的对象的集合,每个对象根据其位置有一个整数索引值与其对应,类似于数组. 使用向量之前,必须包含相应的头文件: #include<vector> using std::vector 同时也应当注意,vector是一个模板类,而非数据类型.所以在