
C/C++/STL
zhsenl
这个作者很懒,什么都没留下…
展开
-
指针
type *p 类型是type * ,指向type的指针 pconst char *p : 指向const char的指针pchar * const p : 指向 char的const指针p单目运算符从右到左运算 指针数组 int *p[2]; 首先声明了一个数组,数组的元素是int型的指针。 数组指针 int (*原创 2012-03-31 18:26:38 · 474 阅读 · 0 评论 -
继承
#include using namespace std;class A{public : A(){a = 1;} void display(){cout << "a"<< a <<" ";}protected: void increase(){a++;}private: int a;};class B:public A{public: B() { incre原创 2012-04-03 15:33:25 · 431 阅读 · 0 评论 -
c/c++试题
1. Assume hello is a character array. Which of the following operations does NOT produce a string? (A) char hello[] = {'h', 'e', 'l', 'l', 'o'}; (B) char hello[] = {'h', 'e', 'l', 'l', 'o',原创 2012-04-24 15:07:11 · 485 阅读 · 0 评论 -
c++构造函数
1.#include using namespace std;class Myclass{public: Myclass(int n) { number = n; cout << "Myclass(int n)\n";} Myclass(Myclass &other) { number = other.number; cout<<"Myclass(Myclass &oth原创 2012-03-31 09:39:13 · 700 阅读 · 0 评论 -
STL 总结
1.C++模板函数模板:独立于类型的函数,可产生函数的特定版本类模板: 独立于类型的类,可产生类的特定版本,如vectot<int>原创 2014-05-15 15:52:31 · 715 阅读 · 0 评论 -
Effective C++ Item 42 了解 typename 的双重意义
经验:声明 template 参数时,前缀关键字 class 和 typename 可互换。请使用关键字 typename 标识嵌套从属类型名称;示例1:template<typename C>void print2nd(const C &container){ C::const_iterator *x;//歧义。如果const_iterator是个static成员变量,x是个global 变量,这里的 *就是乘 //...}示例2:template<typename C>void pr原创 2014-07-14 08:54:54 · 884 阅读 · 0 评论 -
《python源码剖析》笔记 python环境初始化
1.线程环境初始化图13-1Py_InitializeEx,Python会首先调用 PyInterpreterState_New创建一个崭新的PyInterpreterState对象。图13-2创建了PyInterpreterState(进程状态)对象之后,Python会调用PyThreadState_New创建PyThreadState(线程状态)对象图13-3全局变量_PyThreadState_Current维护着当前活动的线程PyInterpreterState对象中维护着所有的PyT原创 2014-06-23 18:47:16 · 1727 阅读 · 0 评论 -
Effective C++ Item 48 认识 template 元编程
经验:Template metaprogramming (TMP, 模板元编程)可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率示例1:template<typename IterT, typename DistT>void advance(IterT &iter, DistT d){ if(typeid(typename std::iterator_traits<IterT>::iterator_catogory) == typeid(std::random_access_it原创 2014-07-16 09:32:52 · 884 阅读 · 0 评论 -
STL 源码剖析 算法 stl_numeric.h -- copy
唯一对外接口/*--------------------------------------------------------------------------------------* copy 函数及其重载形式*///完全泛化版本。 template<class InputIterator, class OutputIterator> // ? 这里的 InputIterator 和 OutputIterator 都只是名称而已,哪里确保了它们真的至少是 InputIterator 和 O原创 2014-07-16 17:27:30 · 1162 阅读 · 0 评论 -
STL 源码剖析 算法 stl_numeric.h
描述、源码、示例version 1:普通操作版本version 2: 泛化操作版本1.accumulate描述:计算 init 和 [first, last) 内所有元素的总和源码://version 1template <class InputIterator, class T>T accumulate(InputIterator first, InputIterator last, T init) { for ( ; first != last; ++first) ini原创 2014-07-16 17:26:11 · 1255 阅读 · 1 评论 -
《python源码剖析》笔记 python多线程机制
1.GIL与线程调度Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(Global Interpreter Lock)来互斥线程对Python虚拟机的使用为了支持多线程机制,一个基本的要求就是需要实现不同线程对共享资源访问的互斥,所以引入了GIL。GIL:在一个线程拥有了解释器的访问权之后,其他的所有线程都必须等待它释放解释器的访问权,即使这些线程的下一条指令并不会互相影响。在调用任何Python C API之前,要先获得GILGIL缺点:多处理器退化为单处理器;优原创 2014-06-23 21:08:54 · 2391 阅读 · 0 评论 -
Effective C++ Item 4 确定对象被使用前已先被初始化
经验1:为内置对象进行手工初始化,因为C++不保证初始化它们原创 2014-05-22 21:26:34 · 902 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algobase.h
1.iter_swap描述:将两个 ForwardIterator 所指的对象对调源码://version 1template <class ForwardIterator1, class ForwardIterator2, class T>inline void __iter_swap(ForwardIterator1 a, ForwardIterator2 b, T*) { T tmp = *a; *a = *b; *b = tmp;}//version 2template原创 2014-07-16 17:33:50 · 922 阅读 · 0 评论 -
Effective C++ Item 11 在operator= 中处理“自我赋值”
经验:确保当对象自我赋值时operator=有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap。原创 2014-05-24 21:00:05 · 888 阅读 · 0 评论 -
Effective C++ Item 9 绝不在构造和析构过程中调用virtual函数
经验:在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层)。让derived class将必要的构造信息向上传递至baseclass构造函数原创 2014-05-24 20:22:00 · 962 阅读 · 0 评论 -
Effective C++ Item 8 别让异常逃离析构函数
经验1:析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序。经验2:如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。原创 2014-05-24 20:04:34 · 907 阅读 · 0 评论 -
Effective C++ Item 10 令operator= 返回一个reference to *this
经验:令赋值(assignment)操作符返回一个reference to *this --》 这样可以实现级联赋值原创 2014-05-24 20:25:23 · 1065 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algo.h -- merge
merge (应用于有序区间)--------------------------------------------------------------------------描述:将两个经过排序的集合S1和S2,合并起来置于另一段空间。所得结果也是一个有序(sorted)序列思路:1.遍历两个序列直到其中一个结束了2.如果序列一的元素较小,将它放到结果序列中,并前进 13.如果序列二的元素较小,将它放到结果序列中,前前进 14.遍历结束后,将还没有遍历完的序列复制到结果序列的尾部源码:原创 2014-07-18 16:29:20 · 745 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algo.h -- inplace_merge
inplace_merge(应用于有序区间)--------------------------------------------------------------------描述:如果两个连接在一起的序列[first, middle)和 [middle, last]都已排序,那么 inplace_merge 可将它们结合成单一一个序列,并仍有序。源码:template <class BidirectionalIterator>inline void inplace_merge(Bidi原创 2014-07-20 18:28:40 · 1131 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algo.h -- search
search-------------------------------------------------------------------------描述:在序列一[first1, last1) 所涵盖的区间中,查找序列二[first2, last2) 的首次出现点。思路:1.遍历序列二2.如果两序列的当前元素一样,都前进 13.否则序列二的迭代器重新指向开始元素,序列一前进 1 ,序列一的长度减 1复杂度:最坏情况是平方: 最多 (last1 - first1) * (last2原创 2014-07-18 16:34:54 · 920 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algo.h -- search_n
search_n ----------------------------------------------------------------------------------------描述:在序列[first, last) 所涵盖的区间中,查找"连续 count 个符合条件之元素"所形成的子序列,并返回迭代器 last 思路:1.首先找出 value 第一次出现点2.该出现点的后面是否连续出现 count - 1 个 value3.如果是,找到了,如果不是,在当前元素后的区间重新找原创 2014-07-19 19:40:46 · 880 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algo.h -- binary_search
int main(){ int A[] = { 1, 2, 3, 3, 3, 5, 8 }; const int N = sizeof(A) / sizeof(int); for (int i = 1; i <= 10; ++i) { cout << "Searching for " << i << ": " << (binary_search(A, A + N, i) ? "present" : "not present") << endl; }}/*原创 2014-07-19 19:44:20 · 924 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algo.h -- merge sort
merge sort----------------------------------------------------------------------描述:归并排序思路:1.将区间对半分割2.对左、右段分别排序3.利用inplace_merge将左、右段合并成为一个完整的有序序列复杂度:O(log n)源码:template<class BidirectionalIter>void mergesort(BidirectionalIter first, Bidirecti原创 2014-07-20 18:31:07 · 1215 阅读 · 0 评论 -
Effective C++ Item 14 在资源管理类中小心copying行为
经验:复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。普遍而常见的RAII classcopying行为是:抑制copying,施行引用计数法(reference counting)。不过其他行为也都可能被实现。原创 2014-05-24 22:28:16 · 655 阅读 · 0 评论 -
Effective C++ Item 13 以对象管理资源
经验1:为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源经验2:两个常被使用的RAII classes分别是tr1::shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它(被复制物)指向null原创 2014-05-24 22:21:26 · 712 阅读 · 0 评论 -
Effective C++ Item 2 尽量以const, enum, inline 替换 #define
尽量以const, enum,inline 替换 #define --》 宁可以编译器替换预处理器原创 2014-05-22 20:46:34 · 750 阅读 · 0 评论 -
Effective C++ Item 3 尽可能使用const
尽可能使用const原创 2014-05-22 20:53:15 · 710 阅读 · 0 评论 -
Effective C++ Item 5 了解 C++ 默默编写并调用哪些函数
经验:如果你自己没声明,编译器会自动声明copy constructor,copy assignment,destructor,如果你没有声明任何构造函数,编译器会自动声明default constructor原创 2014-05-22 22:39:36 · 910 阅读 · 0 评论 -
Effective C++ Item 7 为多态基类声明virtual析构函数
经验1:带多态性质的基类应该声明一个virtual 析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual 析构函数经验2:classes的设计目的如果不是作为base classes使用,或不是为了具备多态性,就不该声明virtual 析构函数原创 2014-05-22 22:59:51 · 761 阅读 · 0 评论 -
Effective C++ Item 15 在资源管理类中提供对原始资源的访问
经验:APIs往往要求访问原始资源,所以每一个RAII class应该提供一个“取得其所管理之资源”的办法。对原始资源的访问可能经由显式转换或隐匿转换。一般而言显式转换比较安全,但隐式转换对客户比较方便。原创 2014-05-24 22:31:03 · 808 阅读 · 0 评论 -
STL 源码剖析 算法 stl_heap.h
heap-------------------------------------------------------------------------binary heap 是一种完全二叉树。隐式表示法:以 array 表述 tree。小技巧:将 array 的 #0 元素保留,则第 i 个元素的左右子节点分别是 2i 和 2i + 1,父节点是i/2 --> STL 里没有采用这种小技巧将 array 无法动态改变大小,所以用 vector 替代 array这个文件里提供了各种堆操作的原创 2014-07-21 09:58:35 · 1033 阅读 · 0 评论 -
STL源码剖析 容器 stl_deque.h
deque------------------------------------------------------------------------??一直看不懂 operator->() ,不明白它为什么不用接受参数,直接 return &(operator*())好像我们用迭代器的时候也不没怎么用到这个函数,甚至我都不会用1.概述vector 是单向开口的连续线性空间,deque 则是一种双向开口的连续线性空间允许常数时间内对起头端进行元素的插入和移除操作没有容量概念,因为它是动原创 2014-07-21 09:59:23 · 1190 阅读 · 0 评论 -
STL源码剖析 容器 stl_queue.h
queue----------------------------------------------------------------------stack 是一种配接器(adapter),以某种容器作为底部结构,改变其接口,使之符合"先进先出"的特性。SGI STL 默认以 deque 为 stack 底部结构没有遍历行为,没有遍历器示例:#include <queue>#include <list>#include <iostream>#include <algorithm>原创 2014-07-21 10:05:48 · 1071 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algo.h -- upper_bound
upper_bound(应用于有序区间)-------------------------------------------------------------------------------------------------------------------------------------------------描述:受STL区间前闭后开习惯的影响,upper_bound成功找到某个值时,返回一个迭代器指向每一个"不大于 value "的元素的下一个位置,而不是指向 value 的迭代原创 2014-07-19 19:43:27 · 892 阅读 · 0 评论 -
STL源码剖析 容器 stl_stack.h
stack-------------------------------------------------------------stack 是一种配接器(adapter),以某种容器作为底部结构,改变其接口,使之符合"先进后出"的特性。SGI STL 默认以 deque 为 stack 底部结构没有遍历行为,没有遍历器示例:#include <stack>#include <list>#include <iostream>#include <algorithm>using names原创 2014-07-21 10:03:24 · 943 阅读 · 0 评论 -
STL 源码剖析 算法 stl_algo.h -- pre_permutation
pre_permutation----------------------------------------------------------------描述: 取得 [first, last) 所标示之序列的前一个排列组合。如果没有,返回 false,有,返回true思路:从后往前1.找两个相邻元素,令左端的元素为*i,右端的元素为*ii,且满足 *i > *ii2.找出第一个小于 *i 的元素,令其为 *j,将*i,*j元素对调3.将ii右端的所有元素颠倒template <cl原创 2014-07-20 18:00:45 · 1054 阅读 · 0 评论 -
STL源码剖析 容器 stl_list.h
list----------------------------------------------------------------------??为什么很多在算法库里有的算法还要在类的成员函数里重新实现一遍?-->1.因为算法库里的是通用的,对于具体的类来说效率不高。比如说 reverse 如果直接用 stl_algo.h 里的 reverse,会再调用 iter_swap,而 iter_swap 的实现方法是借用临时变量来交换两个迭代器指向的元素,这样会调用好几次构造函数、拷贝方法、析构原创 2014-07-21 09:57:31 · 1394 阅读 · 0 评论 -
Effective C++ Item 6 若不想使用编译器自动生成的函数,就该明确拒绝
为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种方法原创 2014-05-22 22:50:04 · 1008 阅读 · 0 评论 -
Effective C++ Item19 设计class犹如设计type
经验:class的设计就是type的设计。在定义一个新的type之前,要考虑以下主题:1. 新的type的对象应该如何被创建和销毁2. 对象的初始化和对象的的赋值该有什么样的差别3. 新type的对象如果被passed by value意味着什么4. 什么是新type的“合法值”5. 你的新type需要配合某个继承图系吗6. 你的新type需要什么样的转换7. 什么样的操作符和函数对此新type而言是合理的8.原创 2014-05-26 15:23:20 · 714 阅读 · 0 评论 -
__cplusplus
本文为senlie原创,转载请保留此地址:http://blog.youkuaiyun.com/zhengsenlie原创 2014-05-26 22:02:29 · 861 阅读 · 0 评论