C++STL泛型编程(一)—— vector_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++STL泛型编程(一)—— vector

C++STL泛型编程(一)—— vector

 2014/11/15 21:06:43  cyw  程序员俱乐部  我要评论(0)
  • 摘要:一、STL简单介绍泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。STL以迭代器(Iterators)和容器(Containers)为基础,是一种泛型算法(GenericAlgorithms)库,容器的存在使这些算法有东西可以操作
  • 标签:泛型编程 c++ 编程 CTO 泛型

??????? 一、STL简单介绍

??????? 泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。

??????? STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。STL以迭代器 (Iterators)和容器(Containers)为基础,是一种泛型算法(Generic Algorithms)库,容器的存在使这些算法有东西可以操作。STL包含各种泛型算法(algorithms)、泛型指针(iterators)、泛型容器(containers)以及函数对象(function objects)。STL并非只是一些有用组件的集合,它是描述软件组件抽象需求条件的一个正规而有条理的架构

?????? 泛型的第一个好处是编译时的严格类型检查。这是集合框架最重要的特点。此外,泛型消除了绝大多数的类型转换。如果没有泛型,当你使用集合框架时,你不得不进行类型转换。

?????? 关于泛型的理解可以总结下面的一句话,它是把数据类型作为一种参数传递进来。

?

??????? 二、组件:

??????? 1、容器:顺序容器{vector、list、deque、string等}是一系列元素的有序集合,关联容器{set、multiset、map、multimap}包含查找元素的键值;

??????? 2、迭代器,作用:遍历容器;

??????? 3、算法:1、排序算法;2、不可变序算法;3、变序性算法;4、数值算法。

?

?????? 三、容器:

?????? 2.1 vector容器
?1、创建形式
?(1)不指定容器的元素个数:vector<int > v;
?(2)创建时,制定容器的大小:vector<int> v(10);
?(3)创建一个具有n个元素的向量容器对象,每一个元素具有指定的初始值:vector<int> v(10,0.8);
?(2)尾部元素扩张,调用push_back()方法,尾部添加,并自动分配新的内存空间。
?2、访问方式
?(1)以下标方式访问vector元素,类似于数组的访问
?(2)用迭代器访问
??vector<[数据类型]>::iterator it;?//it相当于指针,然后结合循环语句
?(3)元素的插入
??insert()方法可以在vector对象的任意位置 前 插入一个新的元素,同时vector自动扩展一个元素空间,插入位置之后的所有元素依次向后挪动一个位置。配合<对象>.begin(),<对象>.end()方法【begin()返回的是首元素位置的迭代器,end()返回的是最后一个元素的下一个元素位置的迭代器】
??注意:<对象>.insert()方法要求插入的位置,是元素的迭代器位置,而不是元素的下标。


#include<vector>
#include<iostream>

using namespace std;

int main(int argc,char* argv)
{
?vector<int> v(3);
?v[0] = 2;
?v[1] = 7;
?v[2] = 9;
?//在最前面插入新元素,元素值为8
?v.insert(v.begin(),8);??????//第一参数是迭代器的位置,第二个参数是插入的值
?//在第二个元素前添加新的元素,3
?v.insert(v.begin()+2,3);??????????//v.begin()+2
?//使用迭代器变量,相当于定义指针
?vector<int>::iterator it;
?for(it = v.begin();it != v.end();it++)
?{
??//输出迭代器上的元素值
??cout << *it << " " ;
?}
?// 换行
?cout << endl ;
?return 0;
}

?(4)元素的删除
?调用erase()方法可以删除vector中迭代器所指的一个元素,或者一段区间中的所有元素。
?clear()方法则是一次性的删除vector中的所有元素。
?
?v.erase(v.begin()+1,v.begin()+5);//头指针到尾指针

?(5)使用reverse反向排序算法,该函数包含于“#include<algorithm>”.

?reverse(v.begin(),v.end());//头指针到尾指针
?
?(6)使用sort()算法对向量元素排序,包含于"#include<algorithm>".
?sort算法要求使用随机访问迭代器的方式进行排序,在默认的情况下,对向量元素进行升序排列。
?
?sort(v.begin(),v.end());//头指针到尾指针,可以进行重写

?(7)向量的大小
?<对象>.size():返回向量的大小,即元素的个数。
?<对象>.empty():返回向量是否为空。0或者1.

发表评论
用户名: 匿名