`
cyw
  • 浏览: 31471 次
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • STL
阅读更多

        一、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++ STL 开发技术导引(随书源码)

    第4章 C++STL泛型库概述 第5章 C++STL泛化技术分析 第三篇 C++STL容器技术 第7章 deque双端队列容器 第8章 list双向链表容器 第9章 slist单向链表容器 第10章 bit_vector位向量容器 第11章 set集合容器 第12章 ...

    C++ STL开发技术导引(第5章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

    C++ STL 开发技术导引(第6章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

    C++ STL开发技术导引(第3章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

    C++/C编程规范

     本书涵盖了C++程序设计的每一个方面,包括设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、STL容器和算法等。书中对每一条规范都给出了言简意赅的概述,并...

    难得C++全栈!侯捷老师C++天龙八部合集+专业辅导 C++技能超级实战+算法实践+系统设计

    02.侯捷 - STL标准库和泛型编程 03.侯捷 - C++设计模式 04.侯捷 - C++新标准C++11&14 05.侯捷 - C++内存管理机制_60_侯捷 06.侯捷 C++ Startup 揭密:C++ 程序的生前和死后 07.算法原理与实践(选修) 08.系统设计与...

    C++课程小作业-STL容器与迭代器的实现路径-设计类vector容器myVector

    STL是高效的C++程序库,是大量类模板和函数模板的聚集,主要的组成部分包括容器、迭代器、算法、函数等。其中容器是存放对象的集合,使用类模板方式; 选代器是容器与算法的粘合剂,是所谓的泛型指针, 使用类模板方式...

    高质量 C++/C 编程指南

    , 涵盖了C++程序设计的每一个方面,包括设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、STL容器和算法等。书中对每一条规范都给出了言简意赅的叙述,并辅以...

    C++函数模板与类模板实例解析

    泛型编程最初诞生于C++中,目的是为了实现C++的STL(标准模板库)。 模板(template)是泛型编程的基础,一个模板就是一个创建类或函数的蓝图或公式。例如,当使用一个vector这样的泛型类型或者find这样的泛型函数时...

    C++编程规范

    , 本书涵盖了C++程序设计的每一个方面,包括设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、STL容器和算法等。书中对每一条规范都给出了言简意赅的叙述,并...

    STL源码剖析-简体中文PDF

    这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和...

    标准模板库(STL)源码剖析

    这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和...

    STL源码剖析

    这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和...

    STL 源码剖析(侯捷先生译著)

    内容简介回到顶部↑这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚...

    摩托罗拉C++面试题

    模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程。 它体现了一种通用和泛化的思想。 STL有7种主要容器:vector,list,deque,map,multimap,set,multiset. 17.你如何理解MVC。简单举例来说明其应用。 ...

    STL:本例程提供了C++的STL常用数据结构及其算法的使用范例,比如vector、string、list、forward_list、deque、queue、stack、map、set、multimap、multiset、tuple、bitset的使用范例,以及algorithm常用的find、sort、copy、replace、count、accumulate......等泛型算法的使用范例。为面试笔试编程题提供便利

    STL本例程提供了C++的STL常用数据结构及其算法的使用范例,为面试笔试编程题提供便利

    STL 源码剖析

    这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和...

    STL.源码剖析_____________

    这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和...

Global site tag (gtag.js) - Google Analytics