C++ primer 读书笔记(2)
来源:互联网 发布:淘宝怎么查快递到哪了 编辑:程序博客网 时间:2024/06/05 20:20
这样就不担心类型转换带来的副作用。for(string::size_type ix = 0; ix != str.size(); ++ix) str[ix] = '*';
其实在一般的系统中,string::size_type 和 size_t 是同一种类型,即一种unsigned类型,我们可以直接使用下标对string对象进行操作。
在我们没有对string对象进行初始化时,编译器自动为我们将实例初始化为空字符串。
在使用vector 容器时,int类型的容器,若不进行初始化,编译器将为我们初始化每一个变量为0 , 当我们要使用索引时 , 应该这样定义之 :
vector 的特性之一就是动态增长。即vector::push_back() 具有常数时间的复杂度。 用下标进行初始赋值是无效的,可能会引发运行是严重错误(这种错误由程序员负责!)。所以,应该使用如下的方法:vector<int>::size_type ix ; //okvector::size_type ix ; //error
使用vector自带的方法进行动态扩展。for (vector<int>::size_type ix = 0 ; ix != 10 ; ++ix) { cin >> temp ; ivecl.push_back (temp) ; }
建议使用迭代器对容器中的元素进行访问。因为可以使用下标访问的容器很少,而且尽管可以,也推荐使用迭代器。
实际上迭代器就是一个指针, 指向每一个元素,无论什么类型,加一以后移动一个元素的内存字节大小。
由容器的end方法返回的值不指向实际存在的元素,即最后一个元素的后面一个元素。它只是起一个哨兵的作用,告诉我们对这个容器已经处理完了。
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 8begin = 0xb15010 value = 1 begin+1 = 0xb15014 value = 1///可以看到,这个是指针类型喽, 我是64位操作系统,所以指针是8byte///大家可以吧int换成double试试, 结果相应的就变了Begin 和 Begin +1 之间就相隔8字节了, 但是指针的sizeof还是8
0 0
- 【旧】C++Primer读书笔记(2)
- C primer plus 读书笔记2
- 《C++Primer》读书笔记(2)
- c++primer读书笔记(2)
- C++Primer 读书笔记 第2章 浏览
- C++Primer读书笔记:2 C++浏览
- <<C++Primer PLus 第五版>>读书笔记2
- C++Primer读书笔记(2)-引用和类型
- C primer plus 读书笔记(2)
- <<C++Primer PLus 第五版>>读书笔记2
- 《C++Primer 5th》 读书笔记2--const
- C-PRIMER PLUS读书笔记
- C-PRIMER PLUS读书笔记
- C++Primer读书笔记(一)
- C Primer Plus 读书笔记
- C++Primer读书笔记(二)
- 写写C++Primer读书笔记
- C primer 读书笔记1
- UDP数据包大小问题
- 最长公共子序列,最大递增子序列,最长公共递增子序列
- 通信网project——最大通过率问题
- mac 在连接wifi时出现“无互联网连接”的警告,叹号
- Android自定义Dialog
- C++ primer 读书笔记(2)
- 如何获取被禁用的网卡的信息,如网卡MAC,网卡名称
- 学习UI01
- Scala 函数
- 使用脚本运行telnet 设置android gps
- 如何在Windows系统上设置Tor
- NSNumber格式化显示
- Android触控基础:MotionEvent
- Spring MVC 中处理静态资源