C++一些标准模板容器简要介绍(1)

  1. vector类型:
  1. vector是c++标准模板库库中得一员,使用的时候需要包含:#include <vector>头文件
  2. vector是同一种数据类型的集合,每个成员都对应一个索引值。
  3. 标准库会管理相关内存。
  4. vector不是一种数据类型,而是一个类模板。
  5. vector类型每一种实例都指定了他保存的数据类型。从而,vector<int>,vector<string>等是一种自定义的数据类型。
  6. vector的初始化方式:

    (1)使用默认初始化 vector<T> v1;  使用类型T的默认构造函数(如果类没有定义默认构造函数,那么标准库仍然产生一个带初始化值的对象。最好在自己的类中定义默认构造函数)。如果是内置类型的,那么使用0值创建初始化

    (2)拷贝初始化vector<T> v1(v2); 使用这种方式的时候,v1和v2需要是同一种数据类型。

    (3)值初始化:vector<T> v1(n,t)或者vector<T> v2(t);

  7. vector对象和其他标准库容器对象的一个重要属性:运行时,高效添加元素
  8. vector支持的操作:vector<T> vec1;

    (1)vec1.empty()    如果vec1为空,那么返回true。否则返回false

    (2)vec1.size()      返回vec1中的元素的个数

    (3)vec1.push_back(v1)   在vec1的末尾添加v1

    (4)vec1[n]   返回vec1中第(n-1)个元素的值。n必须在小于vec1.size()

    (5)vec1 = vec2;   把vec1中得元素替换为vec2的副本

    (6)vec1 == vec2;  如果vec1 等于vec2那么返回true

    (7)> , >= , < , <= , !=都和内置类型意义一样。

  9. 对于size()函数,一般使用size_type保存,和string的size_type类似,需要指明你要使用的size_type是什么类型的。

    vector<int> size_type;   //ok

    vector size_type;      //error

  10. 向vector添加元素:   push_back()函数。

    vector <int> vec1;

    vec1.push_back(10);    //ok

  11. vector的下表操作不能提供添加元素的操作.下表操作只能获取已经存在的元素。这一条的意思就是说如果对于一个vector<int> vec1 来说,如果这个vector中不存在元素,那么如果想通过下表操作来个这个容器添加元素是不允许的。相反,如果这个元素现在已经确定,这个容器中又两个元素 0 和 1,如果通过下表让第一个元素的值变为2是可以的, vec1[0] = 2;//ok。
  12. 特别需要强调的是对于vector来说,下表操作只能使用于确知已存在的元素
  13. 除了使用下标操作符访问vector中得元素之外,标准库还提供了另外一种方式:迭代器:

    1.定义:迭代器是一种检查容器中元素并遍历元素的一种数据类型。(这个定义适用于标准库定义的容器)

    2.每种标准库的容器都定义了对应的迭代器数据类型。vector<class T>::iterator MyIter;

    3.每个标准库容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型的含义相同。

  14. vector容器的begin和end操作。
    1. begin函数返回容器中指向第一个元素的迭代器.

      vector<int>  MyVec(n,10);

      vector<int>::iterator MyIter;

      MyIter = MyVec.begin();

end函数返回容器中指向最后一个元素的下一个位置的迭代器。通常end的操作结果叫做"超出末端迭代器",这个函数返回的迭代器指向的是一个不存在的元素。如果容器为空,那么MyVec.begin() == MyVec.end();迭代器类型可以使用解引用操作符(*) 来访问迭代器所指向的元素。由于容器的end()函数返回的是超出末端元素的位置,所以不能对end()返回的迭代器作解引用操作。如果两个迭代器执行同一个元素,那么这两个迭代器就相等。但是对于vector容器来说,两个值相等的元素,他们对应的迭代器的值是不一样的。(可以参照下边代码做一个实验) vector<int> vec1;
vec1.push_back(1);
vec1.push_back(3);
vec1.push_back(3);
vector<int>::iterator it1, it2;
it1 = vec1.begin();
it2 = vec1.begin() + 2;
if (it1 == it2)
cout << "yes" << endl;
else
cout << "no" << endl;

m. 使用迭代器重置容器元素的值和下表操作相似在容器中我们可以使用iterator来访问或者改变元素的值,但是在某种状况下,我们只希望这个迭代器能只访问元素的值,但是不对元素的值进行更改,这个时候我们就需要使用const_iterator来实现。和普通的iterator唯一不同的是,我们使用const_iterator不能修改容器中元素的值,而只能访问这个容器的值。  在具体的使用中,我们需要根据情况来选择使用哪一种迭代器。

时间: 2024-10-29 03:52:43

C++一些标准模板容器简要介绍(1)的相关文章

C++一些标准模板容器简要介绍(2)

继续上一篇来说: 1.对于const_iterator来说,我们不能改变它所指向的容器的值,但是我们可以改变const_iterator本身的值. vector<int> vec1(10,3); vector<int>::const_ieterator Myiter = vec1.begin(); *Myiter = 2; //error; const_iterator解引用之后是一个常量, ++Myiter; // ok 2.需要区别const_iterator对象和const的

C++ Primer 学习笔记_45_模板(三):缺省模板参数(借助标准模板容器deque实现Stack模板)、成员模板、关键字typename

一.缺省模板参数 1.stack内存能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: template <typename T, typename CONT = std::deque<T> > //此处末尾必须有空格,否则编译出错 class Stack { - private: CONT c_; }; 如果没有传第二个参数,默认为deque 双端队列,当然我们也可以传递std::vector<T> 2.示例:借助

C++笔记(6):标准模板库STL:容器、迭代器和算法

STL(Standard Template Library)是C++标准库的一部分.STL的代码从广义上讲分为三类:容器.迭代器和算法. 1.容器 2.迭代器 3.算法  -------------------------------------------------------------------------------------------------------------------------- 1.容器 顺序容器容器是特定类型对象的集合.顺序容器为程序员提供控制元素存储和访问

C++ 标准模板库STL 队列 queue 使用方法与应用介绍

C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque类型. 定义queue对象的示例代码如下: queue<int> q1; queue<double> q2; queue的基本操作有: 入队,如例:q.push(x); 将x接到队列的末端. 出队,如例:

C++ 标准模板库介绍(STL)

1. STL 基本介绍 C++ STL(标准模板库)是惠普实验室开发的一系列软件的统称,是一套功能强大的 C++ 模板类.STL的目的是为了标准化组件,这样就不用重新开发,让后来者可以使用现成的组件,和开源组件有点殊途同归. STL的版本很多,常见的有HP STL.PJ STL. SGI STL等,另外,STL库属于C++标准库的一部分,两者是包含关系. 由于我平时的编程环境主要在Linux系统下,所以在后面总结中,我会主以GNU ISO C++ Library中的STL源码(5.2.1版本)为

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器

C++ Primer 学习笔记_14_标准模板库_bitset位集合容器 bitset容器是一个bit位元素的序列容器,每个元素只占一个bit位,取值为0或1,因而很节省内存空间.下图是一个bitset的存储示意图,它的10个元素只使用了两个字节的空间. 使用bitset需要声明头文件"#include <bitset>" 1.创建bitset对象 创建bitset对象时,必须要指定容器的大小.bitset对象的大小一经定义,就不能修改了.下面这条语句就定义了bitset对

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

标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类

C++ Primer 学习笔记_13_标准模板库_list双向链表容器

C++ Primer 学习笔记_13_标准模板库_list双向链表容器 list容器实现了双向链表的数据结构,数据元素是通过链表指针串连成逻辑意义上的线性表,这样,对链表的任一位置的元素进行插入.删除和查找都是超快速的.下图是双向循环链表的结构示意图. list的每个节点有三个域:前驱元素指针域.数据域和后继元素指针域.前驱元素指针域保存了前驱元素的首地址:数据域则是本节点的数据:后继元素指针域则保存了后继元素的首地址.list的头结点的前驱元素指针域保存的是链表中尾元素的首地址,而list的尾

C++ Primer(第五版)学习笔记_9_标准模板库_multimap多重映照容器

C++ Primer(第五版)学习笔记_9_标准模板库_multimap多重映照容器 多重映照容器multimap与map结构基本相同,但由于重复键值存在,所以multimap的元素插入.删除.查找都与map的方法不相同. 1.multimap对象创建.元素插入 插入元素时,需要使用insert()方法和类似pair<string,double>("Jack", 300.5)的元素结构.可以看到,重复的元素是按照插入的先后顺序排序的. #include <iostre