| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 456 人关注过本帖
标题:使用了一个函数模板,用于输出对象,但编译错误。
只看楼主 加入收藏
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:3 
使用了一个函数模板,用于输出对象,但编译错误。
程序代码:
template<class object>
void show_ar(object::iterator a,object::iterator b)
{
    object::iterator p = a, p1 = b;
    for (; p != p1; ++p)
        cout << *p << ' ';
}

int main()
{
    using namespace std;
    vector<int> arint(4,3);
    vector<string> arstr(4, "xiaogang");
    show_ar<vector<int>>(arint.begin(),arint.end());//为什么此处编译无法通过呢?请讲解一下,谢了。
    cout << endl;
    show_ar<vector<string>>(arstr.begin(), arstr.end());
    cout << endl;
    system("pause");
    return 0;
}
2014-11-13 11:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:19 
为什么代码不完整,未#include必要的文件?
既然编译无法通过,为什么不贴出编译器给出的错误信息?

若在你源代码上改
程序代码:
#include <iostream>

template<class C>
void show_ar( typename C::iterator first, typename C::iterator last )
{
    for( typename C::iterator itor=first; itor!=last; ++itor )
        std::cout << *itor << ' ';
}

#include <string>
#include <vector>

int main()
{
    using namespace std;
    vector<int> arint(4,3);
    vector<string> arstr(4, "xiaogang");
    show_ar<vector<int>>(arint.begin(),arint.end());
    cout << endl;
    show_ar<vector<string>>(arstr.begin(), arstr.end());
    cout << endl;

    return 0;
}

其实那个模板函数可以做得更通用,不需要调用时显式指明容器类型
程序代码:
#include <iostream>

template<class InputIterator>
void show_ar( InputIterator first, InputIterator last )
{
    for( InputIterator itor=first; itor!=last; ++itor )
        std::cout << *itor << ' ';
}

#include <string>
#include <vector>

int main()
{
    using namespace std;
    vector<int> arint(4,3);
    vector<string> arstr(4, "xiaogang");
    show_ar( arint.begin(), arint.end() );
    cout << endl;
    show_ar( arstr.begin(), arstr.end() );
    cout << endl;

    return 0;
}

最后,当然,根本没必要做这个函数
程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>

int main()
{
    using namespace std;
    vector<int> arint(4,3);
    vector<string> arstr(4, "xiaogang");

    copy( arint.begin(), arint.end(), ostream_iterator<int>(cout," ") );
    cout << endl;
    copy( arstr.begin(), arstr.end(), ostream_iterator<string>(cout," ") );
    cout << endl;

    return 0;
}

2014-11-13 12:22
七夜之华
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
威 望:5
帖 子:82
专家分:103
注 册:2014-9-7
收藏
得分:1 
楼上正解。。。。神回复,一起采纳吧。。。。。

#############################################
##########################################
因为不懂、才要学习、只有学习、才有进步。
2014-11-13 13:28
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
收藏
得分:0 
回复 2 楼 rjsp
谢谢你啊。
2014-11-13 22:34
快速回复:使用了一个函数模板,用于输出对象,但编译错误。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020565 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved