Posts Tagged ‘STL’

April 10, 2011

  关于C++ STL容器的默认内存管理,需参考allocator。
  关于deque的内存模型及其clear操作,我不甚了了,请参考您使用的标准库的代码。
  若想深入了解STL的实现,侯捷大叔的《STL源码剖析》是不错的入门资料,希望能够拜读。
  C++标准中并未对STL的实现细节做过多规定,因此不同实现的细节和表现可能不同。

  C++很复杂,但也并非无底黑洞。学好C++很难,但这种学习过程也会使你收获颇丰。
  学习任何一种技术,都需要热情、激情和足够的耐心。
  做好一件事,需要激情,同时激情常常来源于做好一件事情的满足感。
  满足感会增强人分享的欲望,分享的欲望也常常会使人具有亲和力和感染力,使人觉得你有激情,反过来更有利于人做好一件事。
  blabla, over~

Tags: ,. 855 views
April 3, 2011

  看书时使用思维导图做笔记真是很方便。

Tags: ,. 261 views
May 18, 2010

  听XiaFei同学讲课,得知queque<T>没有clear()成员函数,甚觉诧异,察知确凿。非但queue,其它容器适配器,如stack, priority_queque之流,亦无此clear,于此谨记。

Tags: . 57 views
April 29, 2010

  提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法。容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的基本算法,迭代器是由容器提供的一种接口,算法通过迭代器来操控容器。接下来要介绍的是另外的一种组件,函数对象(Function Object,JJHou译作Functor仿函数)。

什么是函数对象

  顾名思义,函数对象首先是一个对象,即某个类的实例。其次,函数对象的行为和函数一致,即是说可以像调用函数一样来使用函数对象,如参数传递、返回值等。这种行为是通过重载类的()操作符来实现的,举例说明之,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Print
{
public:
    void operator()(int n)
    {
        std::cout<<n<<std::endl;
        return ;
    }
};
int
main(int argc, char **argv)
{
    Print print;
    print(372);
    print.operator()(372); //~ 显式调用
    return 0;
}
Tags: ,. 948 views
March 27, 2010

  好久没写C++没用STL了,今天在STLChina泡了一下午。完整的代码只写了这么一个,贴上来吧。
  写了两个类,Max_Heap和Min_Heap,以他们特例化priority_queue,可以方便地实现最大、最小堆。写完了忽然又觉得这俩类似乎是多此一举了,完全可以用greater来实现最小堆,但由priority_queue的模板定义看出,那样就必须提供一个容器类型,比如vector
  最后还写了测试用例:找出n个数中最大的k个。

1
2
3
4
5
6
7
8
9
10
11
/*
template < class T, class Container = vector<T>,
           class Compare = less<typename Container::value_type> > class priority_queue;
 
explicit priority_queue ( const Compare& x = Compare(),
                          const Container& y = Container() );
template <class InputIterator>
         priority_queue ( InputIterator first, InputIterator last,
                          const Compare& x = Compare(),
                          const Container& y = Container() );
*/
Tags: ,,. 264 views
July 6, 2009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
//~ #include <sstream>
using namespace std;
 
int main()
{
	typedef vector<int> int_vector;
	typedef istream_iterator<int> istream_itr;
	typedef ostream_iterator<int> ostream_itr;
	typedef back_insert_iterator<vector<int> > back_ins_itr;
	//~ vector
	int_vector ivec;
	//~ 从标准输入读整数到vector容器
	copy(istream_itr(cin), istream_itr(), back_ins_itr(ivec));
	//~ 排序
	sort(ivec.begin(), ivec.end());
	//~ 输出到标准输出
	copy(ivec.begin(), ivec.end(), ostream_itr(cout, "\n"));
	return 0;
}
Tags: ,. 9 views
June 8, 2009

一个double类型的vector,没有把它实现成模板,专门用做普通的数值运算,接口定义在vector.hpp, 实现在vector.cpp,Vector类的整体放在了命名空间(namesapce)dutor内,在该命名空间外还实现了一些常用的全局的运算符。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef DUTOR_VECTOR_HPP
#define DUTOR_VECTOR_HPP
#include <iostream>
 
namespace dutor 
{
    class Vector 
    {
      public:
        Vector(int dim = 1); //构造函数,默认dim = 1
        Vector(double v0, double v1);  //~ 以两个值v0, v1初始化一个二维点 
        Vector(double v0, double v1, double v2); //~ 以三个值v0, v1, v2初始化一个三维点 
        Vector(const Vector& dv); //~ 复制构造函数
        //~ ......
Tags: ,. 38 views
May 14, 2009

关联式容器associative container:

被插入的元素并没有一个固定的位置。这不仅是指操作者可能更改其中元素的位置,还有可能——每当新插入一个元素时,容器都会自动的按照某种排序规则将新来的元素放置在合适的位置。也即,这种容器内元素的排列顺序由容器自己的排序规则决定,操作者无能为力。

Tags: ,,. 339 views
Page 1 of 11