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

时间:2016-04-01 15:33:01

标签: c++ c++11 decltype

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

然而,我想知道我是否会遇到更复杂数据类型的任何问题 - 我已经被其他人警告过,auto和decltype之类的东西很快就会产生意想不到的结果。

我的假设是这个模板适用于任何具有operator!=定义的类型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;
}

1 个答案:

答案 0 :(得分:5)

是的,这种用法没有问题。您将使用std::forward_list::iterator $(document).ready(function() { $('#filterButton').click(function(e) { e.preventDefault(); // When the filter button is clicked, grab the ingredient ID and the cuisine ID var mainIngred = $('#sel1').val(); var cuisine = $('#cuisine').val(); var userID = $('#userIDHidden').val(); var data = { "ingredID" : mainIngred, "tagID" : cuisine, "userID" : userID } var filterajaxurl = '/recipe-project/filter-ajax.php'; $.ajax({ url: filterajaxurl, type: "POST", data: data, success:function(data) { $("#cookbook-recipe").html(data); } }); }); }); ,因为这些迭代器符合容器要求,所以您可以继续使用。