【问题标题】:Displaying list horizontally水平显示列表
【发布时间】:2019-02-27 00:58:09
【问题描述】:

我最近遇到了thisgeeksforgeeks 的Hashing 程序,带有分离链

但我无法理解 displayHash() 成员函数的代码。

我的问题是:

  1. 是否真的需要使用 auto 类型(因为代码也适用于 int 类型)?

  2. 如何使用auto x:table[i](我不清楚语法)水平显示列表?

感谢提供有用的文档链接。

【问题讨论】:

  • 1:第2:基于范围的for循环。
  • @Sneftel 请您对此进行更详细的解释吗?

标签: c++ c++11 hash


【解决方案1】:

这一切都与 C++11 的添加有关(这在这一点上并不新鲜,已经超过 7 年了)。

auto 不是一个实际的类型,它被推导出为一个。所以它从来没有必要,尽管它非常有用。例如,如果将int index = hashFunction(key); 替换为auto index = hashFunction(key);,则实际上不会在语义上进行任何更改:auto 被推导为int,因为返回类型为hashFunction
cppreference

for (int x : table[i]) 行被称为“基于范围的 for 循环”,等效于以下内容(至少在这种情况下):

{
    auto && __range = table[i];
    auto __begin = __range.begin();
    auto __end = __range.end();
    for ( ; __begin != __end; ++__begin) {
        int x = *__begin;
        // loop body
    }
} 

cppreference

【讨论】:

  • 除了使用这个“基于范围的 for 循环”之外,还有其他选择吗?
  • 是的,我包含了等效的 sn-p。你也可以做一些不完全等同但足够好的事情,比如for (auto it = table[i].begin(); it != table[i].end(); ++it) { // use *it instead of x }
  • 是的,我也是这么想的。明白了。
  • '从来没有必要'。当实际类型未知时,就像 lambda 函数一样,例如auto f = []() { ... }。 auto 是这里唯一可能的类型。
猜你喜欢
  • 2014-10-16
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多