采用矢量参数的函数模板回文

时间:2013-11-28 11:16:53

标签: c++ templates vector stl

我开始学习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);
}

代码不起作用。我知道它有一些错误,但我不知道如何解决它们。请帮我! 非常感谢你!

3 个答案:

答案 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());
}