您的位置:首页 > 编程语言 > C语言/C++

C++ 通用编程

2016-02-02 22:21 267 查看
标准模板

auto_ptr 是一个模板类,用于管理动态内存分配的方法。

auto_ptr 模板定义了类似指针的对象,可以把new 获得的地址赋给这种对象。当对象auto_ptr 过期时,其中的析构函数会释放这个指针的内容。

例如:

auto_ptr<double> pd;

double *p_reg = new double;

pd = auto_ptr<double> (p_reg);

auto_ptr<double>pauto (p_reg);

注意:

只能对new 分配的内存使用auto_ptr 对象,而不要对由new[] 分配的或者通过声明变量分配的内存使用它。

赋值使用:

auto_ptr<string> ps (new string("I am regined lonely as a clond "));

auto_ptr<string> vocation;

vocation = ps;

当vocation 和 ps 都是常规指针的则两个指针最后都指向了统一个地方,但是我们需要知道,最后指针过期的时候都需要删除,这样就会删除一个对象两次,所以这是人为BUG;

为了避免这种问题:

定义赋值操作符,使之执行深复制。即将目标复制使他们指向两个地址。

建立所有权概念,对与特定对象,只能有一个只能指针指向它。创建智能更高的指针,跟踪引用特定对象的智能指针数,就是引用计数,仅当最后一个指针过期时,delete 才会被调用。

STL 简要说明

STL 是一种通用的编程技术。面向对象编程关注的是编程的数据方面,而STL则关注的是算法,他们之间的共同点是抽象和创建可重用代码,但是理念绝对是不同的。

迭代器:

关于迭代器的一些特征要求:

1.能够进行解引用,应对解引用定义

2.能够将一个迭代器赋值给另一个

3.能够将迭代器与另一个进行比较

4.能够使用迭代器遍历容器中所有的元素

迭代器类型:

1.输入迭代器:单向迭代器,可以递增但是不能倒退。

2.输出迭代器:单向迭代器,只能写不能读。

3.正向迭代器:可以读取和修改数据,也可以使得只能读取数据,具有多次通行性

4.双向迭代器:具有正向迭代器的所有特性,并且可以回退

5.随机访问迭代器:支持随机访问操作

容器的分类

1.序列

可以通过添加要求来改进基本的容器概念,其中6种容器都是序列的,deque,list,queue,priority_queue,stack,vector 都是序列的,学历概念增加了迭代器至少是正向的迭代器这样的要求。

这里有序列的可选要求

返回类型                                           含义                                                      容器

a.front()                                            T& *a.begin()                                          vector,list,deque

a.back()                                            T& *--a.end()                                        vector,list,deque

a.push_front(t)                                  void a.insert(a.begin(),t)                          list,deque

a.push_back(t)                                 void a.insert(a.end(),t)                              vector,list,deque

a.pop_front(t)                                   void a.erase(a.begin())                               list,deque

a.pop_back(t)                                  void a.erase(--a.end())                              vector,deque

a
                                                 T& *(a.begin()+n)                                    vector,deque

a.at(t)                                               T& *(a.begin()+n)                                    vector,deque

2.联合容器

是对容器概念的另一种改进。联合容器将值与关键字关联在一起,使用关键字来查找值。它的长处在于,它提供了对元素的快速访问,与序列相似,联合容器也允许插入元素但是不能指定位置,因为他们的位置一般都和算法有关。

3.操作符和相应的函数符

操作符               相应的函数符                                                    操作符            相应的函数符

+                           plus                                                                     >                     greater

-                            minus                                                                    <                     less

*                           multiplies                                                             >=                    greater_equal

/                            divides                                                                 <=                   less_equal

%                          modulus                                                             &&                   logical_and

-                            negate                                                                  ||                      logical_or

==                         equal_to                                                              !                       logical_not

!=                        not_equal_to

查看原文:http://zmrlinux.com/2016/02/02/c-%e9%80%9a%e7%94%a8%e7%bc%96%e7%a8%8b/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: