您的位置:首页 > Web前端

Effective STL 阅读有感(1)--typename 依赖类型 end()的使用

2011-06-17 15:05 399 查看
在一般的情况下,typename和class是通用的,在有些特殊的情况下用到依赖类型的时候,class是取代不了typename的

比如下面的这个例子:

#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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: