代码改变世界

C++Primer 第三章 字符串、向量和数组

2016-05-21 12:01  szn好色仙人  阅读(187)  评论(0编辑  收藏  举报
//1.位于头文件中的代码一般不应该使用using声明。这是因为头文件的内容会拷贝到所有引用它的文件中,可能会产生始料未及的命名空间冲突。
//  三种使用命名空间中的名字的方法
    using namespace std;    //最好不要在头文件中使用,容易造成命名空间名字污染,导致命名冲突
    using std::string;
    std::string;

//2.头文件cctype中定义了一组对字符进行操作的函数
//  isalnum(), isalpha(), iscntrl(), isdigit(), isgraph(), isprint(),ispunct(), isspace(), isupper(), isxdigit(), tolower(), toupper()

//3.对于运算符&&来说,只有左侧求值为TRUE,才会继续对右侧求值

//4.在不清楚使用哪种类型的容器的时候,使用迭代器对容器的元素进行操作,并使用迭代器共有的操作(*it, it->men, ++it, --it(注意点:forward_list不支持递减运算符), it1 == it2, it1 != it2),这样在更换容器的时候很便利。
    vector<int> vecInt(10);                         //vecInt中存放着10个0,此时会进行值初始化
    vector<int>::iterator itVec = vecInt.begin();

//5.数组中元素的个数也是数组类型的一部分,编译时维度应该是已知的,所以其维度必须是一个常量表达式。
    char buff[10] = "szn";    //允许使用一个字符串常量去初始化字符数组    buff是可读可写的
    char *str = "szn";        //最好不要这样使用
    /*
    C++03中的字符串常量const char[N]当具有显而易见的目标类型时,作为一个限定修饰的转换的结果是char*,这是一个废弃条款,已经在C++11中予以废弃,
    就是说,在C++03中,char *tem="szn";是合法的但在C++11中是非法的,C++11必须这样写:const char * tem = "szn";
    在C中,双引号括起来的字符序列不叫字符串常量,它仅仅是字符串字面量,C的字符串字面量并不属于常量,因为C的常量和常量表达式只能是编译期的。C++中的字符串字面量才能称为字符串常量。
    C中的字符串字面量类型是char[N],数组到指针的转换结果为char*,而C++中的字符串常量类型是const char[N],数组到指针的转换结果是const char*。
    */

//6.数组的一个特性:在很多用到数组名的地方,编译器会自动将其替换为一个指向数组首元素的指针,并且此指针会失去所有数组的特性。

//7.C++11新标准引入了两个名为begin(),end()的函数,用法与容器的同名函数类似。可以作用于内置数组。定义在头文件iterator中。

//8.内置类型的下标运算符中的值可以为负数,但是标准库类型限定其使用的下标必须为无符号类型。