C++Primer笔记(包含string、vector和数组指针)

来源:互联网 发布:非线性优化算法 编辑:程序博客网 时间:2024/09/21 11:18

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.    本条主要是解释#NDEBUGassert的影响。头文件assert.h定义的宏受NDEBUG的影响.如果预程序在处理这个头文件时已经定义了NDEBUGassert宏的内容就定义为空,这意味着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  会重新打开调试开关

原创粉丝点击