Effective STL 阅读有感(1)--typename 依赖类型 end()的使用
2011-06-17 15:05
399 查看
在一般的情况下,typename和class是通用的,在有些特殊的情况下用到依赖类型的时候,class是取代不了typename的
比如下面的这个例子:
在这里好像有这么点特化的意思,就是告诉编译器是这种类型。为了避免潜在的模糊解析。
在这里还有个问题要注意end()函数表示的容器的结束,而不是代表最后一个元素。
所以在使用的时候就是要把最后一个数值写成(*--end).
针对这个end()的使用下面有个具体的例子:
运行的结果:
*it=T
*it=e
*it=s
*it=t
*it=
*it=s
*it=t
*it=r
*it=i
*it=n
*it=g
*it=
最后的end对应的数值是NULL
因此来看对c++基础的学习任重道远。
如果转载请注明引用出处,谢谢(http://blog.csdn.net/lihui130135)
比如下面的这个例子:
#include <iostream> #include <vector> template<typename C> bool lastGreaterThanFirst(const C& container) { if(container.empty()) return false; typename C::const_iterator begin(container.begin()); typename C::const_iterator end(container.end()); return (*--end > *begin); } int main() { int array[] = {10,20,30}; std::vector<int> vecObj(array,array+3); std::vector<int>::iterator it = vecObj.end(); std::cout << "*it=" << *--it << std::endl; std::cout << "vecObj.size()=" << vecObj.size()<< std::endl; std::cout << lastGreaterThanFirst(vecObj) << std::endl; return 0; }
在这里好像有这么点特化的意思,就是告诉编译器是这种类型。为了避免潜在的模糊解析。
在这里还有个问题要注意end()函数表示的容器的结束,而不是代表最后一个元素。
所以在使用的时候就是要把最后一个数值写成(*--end).
针对这个end()的使用下面有个具体的例子:
#include <iostream> #include <string> int main() { std::string str("Test string"); std::string::iterator it; for(it = str.begin(); it < str.end(); ++it) std::cout << "*it=" << *it << std::endl; std::cout << "*it=" << *it << std::endl; return 0; }
运行的结果:
*it=T
*it=e
*it=s
*it=t
*it=
*it=s
*it=t
*it=r
*it=i
*it=n
*it=g
*it=
最后的end对应的数值是NULL
因此来看对c++基础的学习任重道远。
如果转载请注明引用出处,谢谢(http://blog.csdn.net/lihui130135)
相关文章推荐
- typename使用在模板中区分static成员和类型
- [C++再学习系列] typename和依赖类型
- 使用变量 数据类型转换 逻辑控制语句(begin ...end; case...end; if...else; while)
- class 与 typename (在模板定义上)的通用与各自特殊性(前者-类,后者-嵌套依赖类型名)
- 不依赖PHP7和HHVM,如何在PHP中使用强类型
- 泛型编程 - 使用 typename 标识类型
- 阅读优秀的JAVA模板引擎Beetl的使用说明有感
- More Effective C++ 阅读笔记(四)-- 避免使用隐式类型转换
- 阅读effective stl 有感(一)
- typename 在stl中使用,防止编译器类型识别模糊
- C++模版中的typename关键字和嵌套依赖类型(依赖名称)
- 不依赖PHP7和HHVM,如何在PHP中使用强类型
- 阅读effective stl 有感(二)
- Effective C#阅读笔记-3使用is或者as代替cast做类型转换
- [C++再学习系列] typename和依赖类型
- 关于模板中的嵌套依赖类型名与typename
- spring.net基本使用:控制反转和依赖注入
- MYSQL中 case when then else end使用举例
- 使用Cscope阅读Linux源码
- springboot 使用thymeleaf 模板引擎时报错org.xml.sax.SAXParseException: 元素类型 "link" 必须由匹配的结束标记 "</link>" 终止