将 Python 转换为 C++ - lambda 中的索引

Converting Python to C++ - index in lambda

本文关键字:lambda 索引 C++ Python 转换      更新时间:2023-10-16

我是python的新手,我正在尝试将一些python代码转换为C++。

path 是一个字符串,WORDS 是一个字符串列表。

Python snippit:

suggestions = filter(lambda x: x[0] == path[0] and x[-1] == path[-1], WORDS)

因为我根本不了解 python,所以我很难理解 0 和 -1 的概念。它们是否表示这些数组的索引,就像ii-1在C++中那样?

这是我的转换尝试:

  vector<string>suggestions; 
int len = path.length();
  for (string &x : dictionary) //for each word in some dictionary
      for (int i = 0; i < len; i++)
        {
          if (path[i] == x[i] && path[i-1] ==x[i-1])
            suggestions.push_back(x);
            break;
        }

尽管我认为它应该是正确的,但这段代码并没有做我想要它做的事情。来自 python 代码的过滤列表比来自C++代码的向量短得多。

字符串是python中的一个序列,所以你问的指示指的是特定的字符。索引 0 在 Python 中的意思与 C++ 相同。python 中的负索引从序列末尾向后计数,因此索引 -1 是字符串中的最后一个字符。

vector<string> suggestions; 
int len = path.length();
for (string &x : dictionary) //for each word in some dictionary
  if(path[0] == x.front() && path[len-1] == x.back())
    suggestions.push_back(x);

lambda 创建一个函数,该函数接受字符串并检查第一个和最后一个字符。然后该函数被传递到filterWORDS的每个元素上调用它。 filter 返回 lambda 返回 true 的所有单词的迭代对象。

我很难理解 0 和 -1 的概念。

请参阅 [Python

列表的负索引] 和 [解释 Python 的切片表示法]。

负数表示您从右边而不是左边计数。因此,list[-1] 是指最后一个元素,list[-2] 是倒数第二个元素,依此类推。

索引 0 是第一个元素,索引 -1 是最后一个元素。如果foo包含[4, 6, 8]foo[0]将被4foo[-1]将是8

对于字符串,它们分别是第一个和最后一个字符。因此,string::front()string::back() C++11,否则正常使用 0 和长度 1 访问。