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

        一、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.

你可能感兴趣的:(C++,vector,STL)