STL容器

标准模板类库容器类有两种类型,分别是顺序和关联。顺序容器提供对其成员的顺序访问和随机访问,关联容器则经过优化关键值访问它们的元素。

找出下面程序的错误:

class CDemo{
    public:
      CDemo() : str(NULL);
      ~CDemo(){
          if(str) delete[] str;
      }
    public:
      char* str;
}

void main(){
    CDemo d1;
    d1.str=new char[32];
    strcpy(dl.str,"trend micro");
    vector<CDemo>* a1=new vector<CDemo>();
    a1->push_back(d1);
    delete a1;
}

这个程序的错误在于delete a1时,会销毁其中push的CDemo对象,而由于push_back(d1)时是浅赋值,即没有开辟新的内存保存d1.str的值,使得程序结束后,对d1.str执行了两次内存释放,造成delete同一片内存,程序崩溃。解决这个问题的方法是定义CDemo类的一个深复制构造函数。

//像下面那样,当erase当前iterator指向的元素时,这个iterator就失效了,对其++或取值都会报错。
vector<int> v;
v.push_back(1);
v.push_back(2);
vector<int>::iterator it=v.begin();
v.erase(it);
it++;
cout<<*it;

下面的代码是使用函数指针完成给定的任务,利用静态模板类实现。

#include <iostream>
using namespace std;

template<class T>
class Operate{
    public:
    static T Add(T a, T b){
        return a+b;
    }
    static T Mul(T a, T b){
        return a*b;
    }
    static T Minus(T a, T b){
        return a-b;
    }
}
//使用时,如下
int a=19, b=1;
cout<<Operator<int>::Add(a,b);

常用的STL容器:

数据结构 描述 实现的头文件
向量(vector) 连续存储的元素 <vector>
列表(list) 由节点组成的双向链表 <list>
双队列(deque) 连续存储的指向不同元素的指针所组成的数组 <deque>
集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素拥有相同的次序 <set>
多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>
栈(stack) 后进先出的值的排列 <stack>
队列(queue) 先进先出的值的排列 <queue>
优先队列(priority_queue) 元素的次序是由作用于所存储的值决定的一种队列 <queue>
映射(map) 由{键,值}对组成的集合,按键排序 <map>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • STL(标准模板库),是目前C++内置支持的library。它的底层利用了C++类模板和函数模板的机制,由三大部分...
    岁与禾阅读 39,234评论 3 132
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,806评论 18 399
  • STL包括容器,算法和迭代器 STL的模板类为c++提供了完善的数据结构,它的模板类的样式就好象数据结构中用类c或...
    元素周期表的十七君阅读 575评论 0 1
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,395评论 11 349
  • 2017年成华区“全民阅读·为爱朗读”公益演出活动即将开始 时间紧,任务重, 从早到晚想的就是这些事儿 虽然劳累 ...
    小步姐姐阅读 327评论 4 4