注册 登录
编程论坛 C++教室

C++编译出错,来帮帮我吧

hhcxx2006 发布于 2013-07-02 08:42, 728 次点击
要求是:
编写一个函数模板, 取const vector 参数并根据vector是否正向逆向都一样而返回true和false值;编写main程序来测试该函数。最后报错了,现在初学stl,请教各位


#include<iostream>
#include<vector>
using namespace std;
template <class T>
bool hanshu(const vector<T> &v1)
{
    vector<T>::reverse_iterator j;
    vector<T>::iterator i;
    for(i=v1.begin();i!=v1.end();i++)
    {
        if(*i==*j)
        {
            j++;
        }
        else
        {
            return false;
        }
    }
    return true;
}

void main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(2);
    v.push_back(3);
    if(hanshu(v))cout<<"true";
    else cout<<"false";

}



[ 本帖最后由 hhcxx2006 于 2013-7-2 19:55 编辑 ]
5 回复
#2
peach54602013-07-02 10:29
程序代码:

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
template <class T>
bool hanshu(const vector<T> &v1)
{
    vector<T>::const_reverse_iterator j;
    vector<T>::const_iterator i;
    for(j=v1.rbegin();j!=v1.rend();j++)
        for(i=v1.begin();i!=v1.end();i++)
        {
            if(*i==*j)
            {
                j++;
            }
            else
            {
                return false;
            }
        }
        return true;
}

void main()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(2);
    v.push_back(3);
    if(hanshu(v))cout<<"true";
    else cout<<"false";

}
#3
hhcxx20062013-07-02 10:47
回复 2楼 peach5460
为什么一定要加一个const呢?这里面有什么规则吗
#4
peach54602013-07-02 11:17
回复 3楼 hhcxx2006
翻书,primer的迭代器那一章有写
const是一个修饰符,一边加了一边没加,会造成类型不匹配

而且你的编译器应该提示很清楚
错误    1    error C2679: 二进制“=”: 没有找到接受“std::_Vector_const_iterator<_Ty,_Alloc>”类型的右操作数的运算符(或没有可接受的转换)

[ 本帖最后由 peach5460 于 2013-7-2 11:20 编辑 ]
#5
hhcxx20062013-07-02 11:20
回复 4楼 peach5460
好的,我们的教材讲stl讲得很简单,所以不太会
#6
jiaol20132013-07-02 17:20
1