C++ 标准::向量<;decltype(iter)>;-decltype的有效用法?

C++ 标准::向量<;decltype(iter)>;-decltype的有效用法?,c++,c++11,decltype,C++,C++11,Decltype,这是我第一次使用decltype,我不确定我是否正确使用了它。该代码确实可以编译,并且似乎可以用于POD-like-char和int 然而,我想知道我是否会在使用更复杂的数据类型时遇到任何问题——有人警告我,像auto和decltype这样的东西会很快得到意外的结果 我的假设是,此模板适用于任何具有运算符!=定义有没有我应该关心的附带案件 #include <forward_list> #include <iostream> #include <cstdlib>

这是我第一次使用decltype,我不确定我是否正确使用了它。该代码确实可以编译,并且似乎可以用于POD-like-char和int

然而,我想知道我是否会在使用更复杂的数据类型时遇到任何问题——有人警告我,像auto和decltype这样的东西会很快得到意外的结果

我的假设是,此模板适用于任何具有运算符!=定义有没有我应该关心的附带案件

#include <forward_list>
#include <iostream>
#include <cstdlib>
#include <vector>

template<typename T>
bool isPalindrome(const std::forward_list<T>& lf)
{
  auto iter = lf.begin();
  std::vector<decltype(iter)> bv; // <-- Correct usage?

  while(iter!= lf.end())
    { bv.push_back(iter++); }

  int istop = bv.size()/2 + bv.size()%2;
  iter = lf.begin();

  for(int i = bv.size()-1; i>=istop; i--, iter++)
  { if( *iter != *(bv[i])) return false; }
  return true;
}

int main(int argc, char* argv[])
{
  std::forward_list<int> list = {0,1,2,1,0};
  std::cout << "Is palindrome: " << isPalindrome(list) << std::endl;
  return 1;
}
#包括
#包括
#包括
#包括
模板
bool isPalindrome(const std::forward_list&lf)
{
自动iter=lf.begin();
std::vector bv;//=istop;i--,iter++)
{if(*iter!=*(bv[i])返回false;}
返回true;
}
int main(int argc,char*argv[])
{
std::forward_list={0,1,2,1,0};

std::cout是的,这种用法没有问题。您将使用
std::forward\u list::iterator
std::vector
,因为这些迭代器满足容器要求,所以您可以使用它。

请注意,这将生成迭代器的向量,而不是迭代器所指类型的向量。否则,是的很好,在他的密码里他似乎知道it@OMGtechy:是的,我知道这一点-在我看来这是一个很好的解决方案。我将在关于CodeReview的另一个问题中询问这一点。首先,为什么要使用
转发列表
,其次,为什么要关心转发列表是否是回文?