【问题标题】:How's the thing iterated over called?迭代的东西是如何调用的?
【发布时间】:2011-09-12 11:05:03
【问题描述】:

我想表达一个迭代器是 const 的(即你不能增加或减少它)但它产生的东西是非常量的:

iterator const it = foo.begin();
it++; // error
*it = ...; // not an error

如果iterator是一个指针,我可以说:

指针 //迭代器

pointee // 它产生的东西

但如果它不是指针,我不确定。我考虑过使用container 作为“pointee”替代品,但迭代器根本不绑定到容器。例如,输入迭代器可以绑定到文件或 STDIN。以下内容是否有效并被其他人使用?

迭代器 //迭代器

迭代 //它产生的东西

很高兴得到任何指导!

【问题讨论】:

  • 我无法想象你描述的东西不是指针。你能举个例子吗?
  • @Paul:你无法想象一个不是指针的迭代器? C++ 中ostream_iterator 的实例怎么样,它怎么可能是一个指针?或者可以想象,Java 中 Vector 上的迭代器可能是基于索引的,而不是一些使用 JNI 指针的优化。事实上,很少有迭代器类型可以真正成为指针,尽管在某些情况下,如果它们有一个指针数据成员而没有其他数据,你不会感到惊讶。
  • 我一直把它称为iteratee,但现在你提到它,我花了一些时间谷歌这个词,它似乎不正确。
  • @Steve:根据我的阅读,所描述的是一个不迭代的迭代器。即以某种方式指向集合的特定成员的对象,并且不能修改为指向任何其他成员。虽然我同意这实际上可能不是指针本身(在内存地址的意义上),而是包含指针数据成员的对象,或索引该特定成员的其他方式;这东西的行为似乎很尖锐。
  • @Paul:在 C++ 中,您不能增加特定对象的事实并不意味着您不能增加它的副本——迭代器具有值语义,而 constness Johannes正在谈论的是变量的属性,而不是变量所持有的值的属性。 iterator const it = foo.begin(); it++ /* error */; iterator it2 = it; it2++; /* fine, points to the next thing in sequence */。我不认为char *constchar* 更具有指向性,我也不认为iterator constiterator 更具有指向性。

标签: language-agnostic iterator const-iterator


【解决方案1】:

我不认为 iterator 的任何派生词 - 无论是 iteratemitereeiteratee 还是 iterand 或其他任何合适的。为什么?因为迭代器对它所指向的东西没有任何操作。其他答案建议的词暗示正在迭代 iteratemiteratee 等。但事实并非如此。它正在被指出。指针指向被指针。迭代器迭代被迭代者。

所以我认为最好使用pointee这个词。

【讨论】:

    【解决方案2】:

    集合的元素,无论是否被迭代,都是一个项目。

    【讨论】:

      【解决方案3】:

      如果我说了很多,我会说“引用”,或者如果我只说一次,我会说“迭代器指向的东西”,并且担心有人可能会认为我在谈论一个C++ 参考。

      我也说指针的“引用”(不是“指针”)。如果人们没有意识到指针和迭代器都是一种引用,尽管它们不是专门的 C++ 引用,但它们总是可以接受教育的。

      【讨论】:

        【解决方案4】:

        “价值”是否太明显(或错误)?毕竟,您想要从迭代器中得到的是值。如果您指的是您正在迭代的一组值,那么我认为“序列”是一个不错的选择。

        【讨论】:

          【解决方案5】:

          -and 后缀在英语中用于表示“被操作的事物”,例如 OED 给出的示例 multiplicand 表示“被相乘的事物”,和 operand 表示“要操作的东西”。

          那么 iterand 对于“要迭代的东西”呢?

          【讨论】:

          • FWIW,我的期望是“iterand”意味着容器/文件/流/正在迭代的任何内容,而不是当前关注的特定成员。
          • 虽然谷歌搜索表明我的期望是错误的。德拉特。
          • @Steve:真:我看到了可能的混淆,特别是考虑到我上面的措辞。
          【解决方案6】:

          因为我们在聊天中讨论过这个,所以在这里发布。

          使用胜利者/受害者设置。

          迭代器/迭代器

          或者你可以使用 Iteratee。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-07-21
            • 2011-07-12
            • 1970-01-01
            • 2020-01-27
            • 2010-10-23
            • 1970-01-01
            • 2022-01-04
            相关资源
            最近更新 更多