c++令本人困扰的地方

1.sort

对于vector可以直接用,list却必须传递cmp比较函数

2.iterator

模板中,(template<typename T>)

vector::iterator itera;
似乎只能在while循环体内进行迭代器自增,不能在for括号内进行迭代器自增

例如:

vector<int> the_vector;
  vector<int>::iterator the_iterator;
  for( int i=0; i < 10; i++ )
    the_vector.push_back(i);
  int total = 0;
  the_iterator = the_vector.begin();
  while( the_iterator != the_vector.end() ) {
    total += *the_iterator;
    the_iterator++;
  }
  cout << "Total=" << total << endl;

但是特别的要说明的是,当类型变量(T)作为参数导出iterator时(vectot::iterator)*,为了编译通过

需要
typename vector<T>::iterator itera;
此时迭代器itera可以在for,while循环里使用

template <typename T> void vector_print(vector<T>v){
    typename vector<T>::iterator itera;

    for(itera=v.begin();itera!=v.end();++itera){
        cout<<*itera<<"   ";
    }
}

3.有默认参数的函数

带默认参数的函数声明时注明默认参数即可,当声明与定义分离时,不能在定义中再指定一个默认值(即使与声明的是同一个值)

4.EOF

cstdio也即stdio.h才有这个宏定义

5.const

函数名后加const

bool Stack:: isempty()const;//声明
bool Stack:: isempty()const{}//定义

事实上,在函数名后加const只会出现在类的方法定义上,表明这个方法成员不可变,
又因为this是隐藏的第一个参数,所以实质要求是方法不能修改实例的属性isempty、isfull
front、back等都可以后面加const预防意外修改实例属性。

6.模板定义应该与声明放在同一个头文件里

对于某些实现了export关键字的编译器可以分开放、头文件放声明,export模板
定义单独放在一个源文件里,包含头文件。(反正gcc、vs都没有实现,)

7.类初始化中的单引号

本条援引 http://blog.csdn.net/chw1989/article/details/7480375

初始化的顺序与成员变量声名的顺序相同。
先看一下下面的程序:
myClass::myClass():b(1),a(b)
{
}
这样的执行结果a,b各是多少呢?b=1,a=1?不是,b=1而a是个随机数。这一点是相当重要的哦,一般在初始化列表中进行初始化时,初始化的顺序应与声明的顺序保持一致,防止出现不必要的错误。
3)对于继承的类来说,在初始化列表中也可以进行基类的初始化,初始化的顺序是先基类初始化,然后再根据该类自己的变量的声明

为什么呢,因为:

myClass::myClass()
{
a = 1;// 没错,效果相当于在初始化列表中进行初始化
b = 1;// 出错,const变量不能进行赋值操作;
}

8.静态(static)成员初始化

参见这篇博文:

http://www.cnblogs.com/fre2technic/archive/2011/03/25/1995044.html

9.明明直觉上同Java那么像,但创建对象的思路迥异!!

C++ 对象只要声明变量, 就算创建, 但是要考虑栈上的对象与堆上的对象的不同, 栈对象会回收
堆对象需要 new 与 delete ……
总之C++就是四不像

10. C++多态性是通过虚函数来实现的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值