C++ primer 读书笔记(2)
2014-05-22 17:53
225 查看
在对string类产生的对象操作是,用到size()方法,还是建议使用string::size_type 类型变量来进行接受,由于string的size方法实际返回值为unsigned类型。所以在定义索引变量的时候,也尽量使用上面的类型变量定义之。
这样就不担心类型转换带来的副作用。
其实在一般的系统中,string::size_type 和 size_t 是同一种类型,即一种unsigned类型,我们可以直接使用下标对string对象进行操作。
在我们没有对string对象进行初始化时,编译器自动为我们将实例初始化为空字符串。
在使用vector 容器时,int类型的容器,若不进行初始化,编译器将为我们初始化每一个变量为0 , 当我们要使用索引时 , 应该这样定义之 :
vector 的特性之一就是动态增长。即vector::push_back() 具有常数时间的复杂度。 用下标进行初始赋值是无效的,可能会引发运行是严重错误(这种错误由程序员负责!)。所以,应该使用如下的方法:
使用vector自带的方法进行动态扩展。
建议使用迭代器对容器中的元素进行访问。因为可以使用下标访问的容器很少,而且尽管可以,也推荐使用迭代器。
实际上迭代器就是一个指针, 指向每一个元素,无论什么类型,加一以后移动一个元素的内存字节大小。
由容器的end方法返回的值不指向实际存在的元素,即最后一个元素的后面一个元素。它只是起一个哨兵的作用,告诉我们对这个容器已经处理完了。
for(string::size_type ix = 0; ix != str.size(); ++ix) str[ix] = '*';
这样就不担心类型转换带来的副作用。
其实在一般的系统中,string::size_type 和 size_t 是同一种类型,即一种unsigned类型,我们可以直接使用下标对string对象进行操作。
在我们没有对string对象进行初始化时,编译器自动为我们将实例初始化为空字符串。
在使用vector 容器时,int类型的容器,若不进行初始化,编译器将为我们初始化每一个变量为0 , 当我们要使用索引时 , 应该这样定义之 :
vector<int>::size_type ix ; //ok vector::size_type ix ; //error
vector 的特性之一就是动态增长。即vector::push_back() 具有常数时间的复杂度。 用下标进行初始赋值是无效的,可能会引发运行是严重错误(这种错误由程序员负责!)。所以,应该使用如下的方法:
for (vector<int>::size_type ix = 0 ; ix != 10 ; ++ix) { cin >> temp ; ivecl.push_back (temp) ; }
使用vector自带的方法进行动态扩展。
建议使用迭代器对容器中的元素进行访问。因为可以使用下标访问的容器很少,而且尽管可以,也推荐使用迭代器。
实际上迭代器就是一个指针, 指向每一个元素,无论什么类型,加一以后移动一个元素的内存字节大小。
vector<int> temp(10 , 1) ; vector<int>::iterator iter = temp.begin() ; //既然是引用,那么值应该是一个地址的,为什么不能直接用cout输出?估计是cout的原因,用printf可以的, printf ("Begin = %p \n Begin +1 = %p \n" , iter , iter+1 ) ; cout << sizeof (iter) << endl ; printf ("begin = %p value = %d \nbegin+1 = %p value = %d\n" , iter ,*iter , \ iter+1 , *(iter+1)) ; //输出: Begin = 0x112e010 Begin+1 = 0x112e014 8 begin = 0xb15010 value = 1 begin+1 = 0xb15014 value = 1 ///可以看到,这个是指针类型喽, 我是64位操作系统,所以指针是8byte ///大家可以吧int换成double试试, 结果相应的就变了Begin 和 Begin +1 之间就相隔8字节了, 但是指针的sizeof还是8
由容器的end方法返回的值不指向实际存在的元素,即最后一个元素的后面一个元素。它只是起一个哨兵的作用,告诉我们对这个容器已经处理完了。
相关文章推荐
- C++ primer 读书笔记(8)
- C++ Primer 读书笔记 Chapter 6 语句
- C++ Primer 读书笔记 Charpter 14 重载操作符和转换
- C++ primer 读书笔记系列——(5)标准IO库
- 《C++ Primer》读书笔记第二章-3-处理类型 And 自定义数据结构
- 读书笔记:C++ primer 5th edition--chapter 3.字符串,向量,数组
- 《C++ Primer》读书笔记第九章-3-额外的string操作 And 容器适配器
- 读书笔记之《C++ Primer》
- C++ Primer3 读书笔记(2)
- 《C++ Primer》读书笔记-第六章 01 函数基础
- 《C++ Primer》读书笔记-第八章 01 IO类
- 《C++ Primer》读书笔记-第九章 01 顺序容器
- C++ Primer 4th 读书笔记(第一部分)
- C++ Primer 读书笔记 - 第二章
- C++ Primer 读书笔记 - 第九章
- C++ Primer 读书笔记 - 第十一章
- 《C++ Primer》读书笔记(6.5,6.8,6.11)
- 《C++ Primer》读书笔记之第15章:面向对象编程
- C++ Primer 第四版读书笔记(八)之顺序容器(续)
- C++ primer 读书笔记