1. String类型定义的变量,包含’\0’,不过size()函数返回的大小值不包含’\0’,如:string str=”her”;str.size()的值是3,不过str[3]的值为’\0’,即是有效访问。
2. String类型变量的运算符:+,其返回值是string类型的,所以str+”hello”+” ”+”world”是有效的操作,不过”hello”+” ”+”world”+str不是有效的操作,因为+运算符的左右操作数至少有一个是string类型的,注意:字符串字面值不是string类型,这个要和其他语言区别开,如:”hello”不具有string类型的操作。
3. 在头文件中总是使用完全限定的标准库名字,理由是头文件的内容会被预处理复制到程序中,如果用using指令,则相当于在包含该头文件的每个程序中都放置了同一using声明,不管,该程序是否需要Using声明。
4. Vector初始化可用已存在的数组进行初始化,如int* numArr=newint[3];numArr[0]=0;numArr[1]=1;numArr[2]=2;vector<int>iArr(numArr,numArr+2);其中iArr中包含2个元素,最后一个元素不包含,即属于[)左闭右开区间,[ begin,end)
5. String为空串时,访问[0]下标不会出错,不过对其进行赋值时会出现未知情况,所以不应该对空串进行访问。不过对于vector为空元素时,不能对任何元素进行访问。
6. 注意Vector<vector<int>>,其可以实现二维数组。
7. Const vector<int>的beign()函数返回的迭代器类型是:const_iterator
8. Bitset集合输出时,先输出高位,再输出低位,如:bitset<10> bitvec2(6);cout<<"bitvec2:"<<bitvec2<<endl;结果是:0000000110,即结果是二进制结果表示高位在左,低位在右
9. vector<int&> iReference;// error:容器元素的类型不能是引用类型
10. 本条主要是解释#NDEBUG对assert的影响。头文件assert.h定义的宏受NDEBUG的影响.如果预程序在处理这个头文件时已经定义了NDEBUG,assert宏的内容就定义为空,这意味着assert宏不在起作用.所以,可以在最终发布程序的时候可以使用-DNDEBUG关闭断言功能或者把#define NDEBUG加到每个源文件中,但这条语句必须放在#include <assert.h>之前.
#include<stdio.h>
#define NDEBUG//要加在#include<assert.h>前面
#include<assert.h>
int main()
{
int x = 0;
assert(x);
printf("aa\n");
return 0;
}
trace(),assert()都只是在DEBUG的模式下才起作用的,如果定义了NDEBUG,编译器会认为是非DEBUG的模式(虽然编译出来的程序还是很大,而且还可以进行调试),此时trace(),assert()就没有用了.就如同你编译成release版的时候这些没有用一样.
#define DEBUG 会重新打开调试开关