STL提供三种组件:容器,迭代器,算法,它们都支持泛型程序设计标准容器有两类:顺序容器和关联容器。

顺序容器(vector,list,deque,string等)是一系列元素的有序组合。

关联容器(set,multiset,map,multimap等)包含查找元素的键值。

迭代器的作用是遍历容器。

库包含四类算法:排序算法,不可变序算法,变序性算法和数值算法。

接下来介绍vector的简单用法

 //题意描述:用vector向量容器装入10个整数,然后使用迭代器//iterator和accumulate算法统计这10个元素的和

 #include<iostream>//cin和cout需要
#include<vector> //向量需要
#include<numeric> //accumulate算法需要
using namespace std; int main(int argc,char *argv[])
{
vector<int>v;//定义向量i
int i;
12 for(i=;i<;i++)
{
v.push_back(i);//尾部元素扩张方式赋值
}
//使用iterator迭代器顺序遍历所有元素
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<" ";//输出迭代器当前位置上的元素值
}
cout<<endl;
22 cout<<accumulate(v.begin(),v.end(),)<<endl;//统计输出向量所有元素的和
return ;
}
//运行结果:

vector向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单,高效的容器,完全可以代替数组。

值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占的内存空间。

创建vector对象常用的有三种形式:

(1) //不指定容器的元素个数,如定义一个用来存储整型的容器vector<int>v;

(2//定义容器的大小,如定义一个用来存储10个double类型元素的向量容器)

vector<double>v();

(3)//创建一个具有n个元素的向量容器对象,每个元素都具有指定的初始值

vector<double>v(,8.6);

上述语句的意思是,定义了v向量容器,共有10个元素,每个元素的初始值都是8.6

 

 尾部元素扩张

通常使用push_back()对vector容器在尾部追加新的元素。尾部追加的元素,vector容器会自动分配新内存空间。可以对空的vector对象扩张,也可以对已有元素的vector对象扩张

 //问题描述:将2,7,9三个元素从尾部添加到v容器中。
#include<iostream>
#include<vector>
using namespace std; int main(int argc,char *argv[])
{
vector<int>v;
v.push_back();
10 v.push_back();
v.push_back(); for(vector<int>::iterator it=v.begin();it!=v.end();it++)
cout<<*it<<" ";
15 cout<<endl;
16 return ;
} //程序运行结果输出:2 7 9

vector元素的删除:

erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。

clear()方法则一次性删除vector中的所有元素。

 #include<iostream>
#include<vector>
using namespace std; int main(int argc,char *argv[])
{
vector<int>v();
vector<int>::iterator it; for(int i=;i<;i++)
11 v[i]=i; //下标方法 for(it=v.begin();it!=v.end();it++) //输出当前迭代器上的元素值
cout<<*it<<" ";
cout<<endl; 17 v.erase(v.begin()+); //删除第二个元素,从0开始计数 for(it=v.begin();it!=v.end();it++) //输出当前迭代器上的元素值
cout<<*it<<" ";
cout<<endl; //删除迭代器第1到第5区间的所有元素
v.erase(v.begin()+,v.begin()+);
for(it=v.begin();it!=v.end();it++) //输出当前迭代器上的元素值
cout<<*it<<" ";
cout<<endl; 29 v.clear(); //清空向量 cout<<v.size()<<endl; //输出向量的大小
return ;
} /*
运行结果:
0 1 2 3 4 5 6 7 8 9
0 1 3 4 5 6 7 8 9
0 6 7 8 9 */

C++ -- STL泛型编程(一)之vector的更多相关文章

  1. UVa 11991:Easy Problem from Rujia Liu?(STL练习,map+vector)

    Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, ...

  2. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  3. C++学习之STL(一)vector

    前言 C++ Primer Plus读书笔记(三)复合类型 中已经简单介绍过vector是什么,这个系列主要是介绍STL特性. 声明 vector<ElemType> c; //创建一个空 ...

  4. C++ STL泛型编程——在ACM中的运用

    学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...

  5. STL之序列容器vector

    首先来看看vector的模板声明: template <class T, class Alloc = allocator<T>> class vector { //… }; v ...

  6. DLL中传递STL参数(如Vector或者list等)会遇到的问题[转载]

    最近的一个项目中遇到了调用别人的sdk接口(dll库)而传给我的是一个vector指针,用完之后还要我来删除的情况.这个过程中首先就是在我的exe中将其vector指针转为相应指针再获取vector中 ...

  7. 《STL系列》之vector原理及实现

    最近忙得蛋疼,但还是想写点属于自己的东西.也不知道写点啥,最后决定试着自己实现STL中常用的几个集合,一来加深自己对STL的理解,二来看看自己是否有这个能力实现.实现目标就是:1能和STL兼容:2最大 ...

  8. STL学习二:Vector容器

    1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...

  9. POJ 3096 Surprising Strings(STL map string set vector)

    题目:http://poj.org/problem?id=3096 题意:给定一个字符串S,从中找出所有有两个字符组成的子串,每当组成子串的字符之间隔着n字符时,如果没有相同的子串出现,则输出 &qu ...

随机推荐

  1. Battery Charging Specification 1.2 中文详解 来源:www.chengxuyuans.com

    1. Introduction 1.1 Scope 规范定义了设备通过USB端口充电的检测.控制和报告机制,这些机制是USB2.0规范的扩展,用于专用 充电器(DCP).主机(SDP).hub(SDP ...

  2. Redis 启动警告解决【转】

    [root@centos224]# service redisd start :M Nov :: (it was originally set to ). _._ _.-``__ ''-._ _.-` ...

  3. Ubuntu vi 上下左右变ABCD问题解决方法

    ---恢复内容开始--- 错误问题:vi上下左右键显示为ABCD的问题 解决方法: 只要依次执行以下两个命令即可完美解决Ubuntu下vi编辑器方向键变字母的问题. 一.执行命令 sudo apt-g ...

  4. 13.Python3标准库--互联网

    (一)urllib.parse:分解url urllib.parse模块提供了一些函数,可以管理URL以及组成部分 1.解析 from urllib.parse import urlparse ''' ...

  5. Producer Flow Control 和 vmQueueCursor

    ActiveMQ可以开启或关闭生产者流量控制Producer Flow Control ,基本原理是producer 发送一条消息会收到broker返回的ack响应,当磁盘或内存快满的时候broker ...

  6. 理解一条语句:SELECT difference(sum("value")) FROM "mq_enqueue" WHERE "channel" =~ /ActiveMQ_TEST/ AND $timeFilter GROUP BY time($interval)

    最近使用grafana在查询InfluxDB中,用到了这一条语句 SELECT difference(sum("value")) FROM "mq_enqueue&quo ...

  7. C#子线程中更新主线程UI-----注意项

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  8. Crypt加密函数简介(C语言)

    定义函数 char * crypt (const char *key,const char * salt); 函数说明 crypt是个密码加密函数,它是基于Data Encryption Standa ...

  9. spring源码分析---事务篇

    上一篇我介绍了spring事务的传播特性和隔离级别,以及事务定义的先关接口和类的关系.我们知晓了用TransactionTemplate(或者直接用底层P的latformTransactionMana ...

  10. 学习Leader选举算法

    读书笔记:<从Paxos到Zookeeper 分布式一致性原理与实践> 选举的前提约定 观察者不参与选举,只有跟随者才参与选举. 优先选事务ID(ZXID)大的,事务Id相同再优先选服务器 ...