我开始学习C ++和STL。 我有一个问题:
写一个函数模板palindrome,它接受一个vector参数并返回true或false来检查该向量是否为回文(12321是回文,1234不是回文)
这是我的代码:
template<class T>
bool palindrome(vector<T> & v)
{
int i,j;
for( i=0,j=v.size();i<v.size()/2;i++,j--)
{
if(v[i]!=v[j])
return false;
}
return true;
}
void main()
{
int ar[]={1,2,3,2,1};
vector<int> v(ar,ar+5);
cout<<palindrome(v);
}
代码不起作用。我知道它有一些错误,但我不知道如何解决它们。请帮我! 非常感谢你!
答案 0 :(得分:3)
您的索引不正确。在循环j=v.size()
中,然后您可以访问v[j]
。但最后一个元素是索引v.size() - 1.你的程序行为将是未定义的。
更改为j=v.size() -1
答案 1 :(得分:2)
最明显的错误是:for( i=0,j=v.size();i<v.size()/2;i++,j--)
您需要j=v.size()-1
答案 2 :(得分:1)
或者你可以使用你对STL的精通来压缩它,并使它适用于列表和其他东西。
template<class T> bool palindrome(T & v){
return std::equal(v.begin(),v.end(),v.rbegin());
}