当前位置: 首页 > C/C++, cpp > 正文

C++ 通用编程

标准模板

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[n]                                                  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/ | Kernel & Me

该日志由 root 于2016年02月02日发表在 C/C++, cpp 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: C++ 通用编程 | Kernel & Me