几年以后再一次看C++,发觉自己在语言上其实还是个一知半解,经常追求会用就行,不求甚解的门外汉。写这篇的目的一个是为了梳理下脉络,忽略细节,先记一下基础中的基础,另一个是为了响应各大神的号召,看过就要写,不写下来过几天就要忘。
一、数据类型
基本数据类型:
bool: | 可赋值一切实数,0为false,其余都为true |
char: | 0-127的整数,或ascii的字符 |
wchar_t: | 宽的char,可存储汉字,日语等宽字符 |
int: | 默认为signed int,如需要无符号数,需明确写明unsigned int,或简写为unsigned |
long: | 同上默认为signed long,无符号为unsigned long |
float: | 由于精度问题,偶尔会由于精度的四舍五入出现些莫名其妙的问题,一般不推荐使用 |
double: | 不推荐float那就剩它了,速度在一些机器上比float更快,说明在效率方面和float比也没有明显劣势 ^_^ |
标准库类型:
§ string: 98版的c++没有把string作为基本数据类型,使用前必须包含 头文件,和std命名空间(using namespace std),不知道c++0x有没有修改这部分的内容,和Java,ruby等等比起来,这个用着实在是有些不方便。
1. 创建方法:
string s = "This is a string.";
string s1("This is another string");
2. s.empty() 返回s是否为空串
3. s.size() 返回s中字符的个数
4. s[n] 返回s中位置为n的字符,位置从0计数
5. s + s1 连接成一个新字符串并返回
6. s == s1 比较内容是否相等
7. 在各个语言里和string有关的操作方法都相当繁多,先就到这,别的用到了再说
§ vector: 书上说现在已经不推荐直接使用数组和指针了,除了在非常要求速度效率的场合,都建议用这个vector来代替,我半信半疑的想去topcoder上找个神仙的代码查证下,结果发现单位的网不给力,居然登陆不上去。只好先记下来再说。
1. vector所在的包是 ,同样在std下
2. vector是一个容器类模板,用vector产生对象时的形式为:vector ivec; vector svec; vector othvec;
3. 创建方法:
vector v1; v1保存类型为T的对象,构造为一个空的容器
vector v2(v1); v2为v1的一个副本,即依照v1创建v2
vector v3(n,i); v3包含n个值为i的元素
4. v1.push_back(t); 在v1中装入t
5. v1[n] v1中第n个元素
- § bitset: C++标准库提供了一个专门用来处理二进制位的类bitset,需引用包 ,个人感觉在某些方面比用整型和位操作符的组合要方便些
1. 创建方法:
bitset b; n为bitset对象的位数,比如16位、32位,每位初始化为0
bitset b(0xffff); 可以用unsigned long型来初始化bitset对象,超出bitset的高阶位会被丢弃
bitset b(“111000”); 用字符串来初始化bitset,string的左边为高阶,右边为低阶,字符串与bitset中的位高低阶的顺序相反
bitset b(s,pos,n); b用字符串s中从位置pos开始的n位的字串来初始化
2. b.size(); 返回b中二进制位的个数
3. b.count(); 返回b中1的个数
4. b[pos]; b中在pos处的二进制位
5. b.set(); 所有二进制位都置为1
6. b.reset(); 所有二进制位置0
7. b.set(pos); pos处置为1
8. b.reset(pos); pos处置为0
9. b.flip(); b.flip(pos); 取反
10. b.to_ulong(); 返回bitset对应的unsigned long值
类类型:
§ class和struct:这两个可以看做声明特殊类型,即类类型,和结构类型的特殊数据类型,它们的对象也是一个类型。所以在class和struct的定义块后面才都需要分号。格式如下:
class class_name{
public:
int function_name(){
………
}
private:
int a_int;
};
struct的格式就是把上面的class换成struct,最后的分号千万都不能落掉。两者的区别在于,不写private和public标号的时候,struct默认所有的变量和方法都是public的,而class默认认为是private的。
二、控制结构
由于大多数语言控制结构的写法大同小异,这里只简单列举格式,不做详细分析。
分支:
§ if-else:
if(expression){
……
}else if(another expression){
……
}else{
……
}
§ switch-case:
switch(expression){
case 1:
……
break;
default:
……
}
c++中的switch分支中的expression只能是整型,如int,bool或char型。
循环:
§ while:
while(expression){
……
}
或:
do{
……
}while(expression); //与while不同,这里需要用分号结束
§ for:
for(int i=0;i<10;i++){
……
}
三、函数
函数的声明和定义,大多语言也都差不多,这里也只简单写下,留待以后再做深究。
return_type function_name(param_type, param_type parameter); //声明里里的参数列表可以只写类型,不写变量名
return_type function_name(param_type parameter1, param_type parameter2){
……
return return_val; //如果return_type为void,这一句略去
}
四、小结
该写和该补充的细节都还有很多,比如外部类型,常量的使用;类的构造方法析构方法,继承与多态;指针函数和函数指针,引用;异常处理与反射机制……
这一次只是作为一个引子,以后尽量把各部分都完善的填充起来。