问题标签 [const-iterator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
104 浏览

c++ - 为什么编译器允许在引用 const 迭代器的函数中发送对迭代器的引用?

我对 const_iterators 有点困惑。例如,让我们考虑一下函数:

现在我可以写:

输出为 {7, 2, 3, 4, 5}。为什么?如果我在容器上获得 const 引用,我不必更改它。这是 Visual Studio 2015 编译器。

0 投票
0 回答
125 浏览

c++ - 为什么 unordered_set 的迭代器是只读的?

在上面的例子中,如何更换汽车的燃料?使用vector不会引发这个问题。

0 投票
3 回答
1088 浏览

c++ - 编译器无法在 Vector_const_iterator 和 Vector_iterator 之间“转换”,即使两者的方法都可用

我正在尝试围绕 std::vector 创建一个小型包装类来表示多项式的系数。调用者需要能够遍历系数,但我不想公开底层实现。

使用此处此处和其他地方描述的模式,我尝试传递迭代器,如下所示:

然后这些 gf255_poly 对象被用在如下方法中:

虽然看起来很简单,但类型有问题。Visual Studio 在 for 循环中给了我这个错误,我似乎无法弄清楚:

我不明白这条消息 -我提供了返回迭代器和 const_iterators 的方法。为什么编译器不能在它们之间进行选择?


这个问题的隐含意义是,这是否是一个向调用者隐藏细节的好策略(因为他们仍然必须处理这些 std::vector 类型),我将不胜感激也能解决这个问题的答案。

0 投票
1 回答
331 浏览

c++ - std::set 迭代器的返回类型冲突

这是今天让我感到困惑的第二个编译器错误。不知何故,对于下面的代码,gcc 抱怨该代码具有返回迭代器return_iter返回冲突类型std::_Rb_tree_iterator<const int*>的函数std::_Rb_tree_const_iterator<const int*>,但它们都不应该是 const 迭代器,因为集合不是 const。谁能解释为什么在std::end()非 const 左值上调用该方法时返回 a const_iterator

完整的代码粘贴在下面。

注意我只在使用gcc. 当我用 clang ( 编译这个错误时没有出现这个错误Apple LLVM version 8.0.0 (clang-800.0.38)。我使用的 gcc 版本是g++ (GCC) 5.1.0

一个相关的问题。这是forward的正确用法吗?std::forward每当您想使用转发参考时都可以调用吗?我在下面调用它的原因是为了以防万一当对象是右值时类型重载了一些方法。


LessPtr某种方式需要导致此错误..

0 投票
0 回答
478 浏览

c++ - 实现迭代器和 const_iterators

我在编译一个带有嵌套迭代器和 const_iterator 类的双向链表类时遇到问题。

我不熟悉使用模板语法,这有点像一场噩梦。现在,我的每个函数似乎都出现错误,最后出现链接器错误。这让我觉得我的标题有问题,或者包含标题,或者与函数的签名有关。

我的标题示例是:

对应的实现是:

但是,当我尝试编译时,它给了我 42 个错误,例如:

“RecentList::const_iterator::operator++(int) const”,引用自:

最后是链接器错误。

还有模板东西存在的原因是列表类使用模板。当我不包含该语法时,Xcode 不喜欢它。

我应该在哪里解决问题?

0 投票
2 回答
493 浏览

c++ - 地址迭代器项

设置了Vertice(Vertex 类)s后,我想进入. 换句话说,Vertice *addressset<Vertice>::iterator it

但是,回报

任何想法?

0 投票
1 回答
69 浏览

c++ - 并行运行时采用迭代器对的函数不起作用

我有以下模板化函数,它在 GameTime (size_t) 的集合上采用 GameName (std::string) 和一对开始/结束迭代器。它遍历范围并将 GameTime-s 加在一起,并返回游戏名称、总游戏时间和平均游戏时间 (GameStats) 的元组:

(出于调试目的,我还列出了我们在开始和结束时迭代的元素。显然它们每次都应该相同,但见下文。)

引用 std::vector 的此函数的类似版本工作正常,但是当它的多个实例并行运行时,这个新函数似乎弄乱了它的迭代器。下面是为每个游戏启动一个进程的代码:

(GameEntries 是将 GameName 映射到 GameTime 向量的 std::map 类型)

以下是运行程序输出的相关部分:

多次运行该程序会产生不同的结果,从某些游戏的正确结果到到处都是完全错误的数字。在程序完成后,我还会列出每个游戏的所有 GameTime 条目,以确保它没有被修改,以防万一这就是问题所在,但向量都毫发无损地从中出来。

然而,从输出中可以看出,在同一个函数中从(假定为常数和未修改的)开始到结束迭代每次都会产生不同的结果。仅当任务并行运行时才会出现这种情况。如果按顺序运行(通过在启动下一个未来之前在每个未来上调用 wait() ),程序运行正确,所以我的猜测是每个线程由于某种原因使其他的迭代器无效,即使它们是不同向量的输入迭代器,它们都是按值传递的。

我想知道是什么导致了这种干扰,以及如何让它们并行工作。

0 投票
3 回答
1108 浏览

c++ - 更改结构向量中的元素

我正在遍历结构向量中的一组元素,并希望更改其中一个结构中的元素。当我写入元素以更改值时,不会保留更新。这是我所拥有的:

首先,在头文件中:

然后在 .cpp 模块中...

向量中给定结构的 event.member 值不会保持为假。返回此循环时,条件语句再次运行。

它与迭代器的 typedef 有什么关系吗?

0 投票
0 回答
568 浏览

c++ - 'int map 迭代器声明之前的预期主表达式

我不知道为什么我会收到此错误:

所以我的迭代器没有被声明,我得到更多没有声明的错误。

这是我的代码:

这很奇怪,因为我在其他函数中声明了相同的东西,并且没有错误:

0 投票
2 回答
1139 浏览

c++ - 为什么 const_iterator 可以与 std::map::erase 一起使用

我的印象是无法eraseconst iterator. 检查此代码
为什么下面的代码编译(C++11,gcc)?

地图本身不是恒定的,但我的理解是应该const iterator使这个失败。