c++ - std::vector<decltype(iter)> - decltype 的有效用法?

标签 c++ c++11 decltype

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

但是,我想知道是否可能会遇到更复杂的数据类型的任何问题 - 其他人警告过我,像 auto 和 decltype 这样的东西很快就会得到意想不到的结果。

我的假设是该模板适用于定义了运算符 != 的任何类型 T。有什么我应该关注的边缘案例吗?

#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;
}

最佳答案

是的,这样的用法没有问题。您将使用 std::forward_list::iteratorstd::vector,并且由于这些迭代器满足容器要求,因此您可以开始使用。

关于c++ - std::vector<decltype(iter)> - decltype 的有效用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36360247/

相关文章:

c++ - decltype(some_vector)::size_type 不能用作模板参数

c++ - 使用流迭代器初始化 vector

c++ - 如何将进度控件与一组在 Visual C++ 的对话框中加载的数据同步

c++ - constexpr 在非常量成员函数上的用途是什么?

c++ - 非静态数据成员初始化

c++ - decltype 和 auto 之间的等价性

c++ - 从实际参数捕获函数参数类型

c++ - 检查鼠标是否在旋转的 Sprite 上方? C++

c++ - 使用operator=和initializer_list找不到继承

c++ - 来自具有浮点类型的模板实例化的移位编译错误