为啥 QVector 的迭代器使用前缀增加而后缀在内部减少?

     2023-02-17     175

关键词:

【中文标题】为啥 QVector 的迭代器使用前缀增加而后缀在内部减少?【英文标题】:Why is QVector's iterator using prefixed increase but postfix decrease internally?为什么 QVector 的迭代器使用前缀增加而后缀在内部减少? 【发布时间】:2016-01-11 14:26:00 【问题描述】:

我目前正在为内部数据结构实现迭代器,并查看了 QVector 如何实现它的迭代器。我不明白为什么 QTypedArrayData::iterator 实现了它的 ++ 和 -- 运算符,例如:

T *i;
inline iterator &operator++()  ++i; return *this; 
inline iterator &operator--()  i--; return *this; 

我不明白的是两者之间的差异:为什么它使用后缀减量运算符?

感谢您的澄清!

【问题讨论】:

我也不明白,所以我猜 - 没有理由。或者只是一个错字。 【参考方案1】:

您缺乏理解意味着期望两者之间存在任何实际差异,并且编码是故意以这种方式完成的。这种期望是合理的,但却是不正确的。你可以用任何一种方式编写这些操作,它们的工作原理是一样的。 可能对复制/移动成本高昂的非 POD 类型很重要,但这里的情况并非如此。 过去在 15 到 20 年前对那个时代的糟糕编译器很重要。谢天谢地,我们不必再处理 VS6 了 :)

【讨论】:

正如我所想。感谢您的澄清。

如何在rust中迭代str或String的前缀和后缀?

】如何在rust中迭代str或String的前缀和后缀?【英文标题】:HowtoiterateprefixesandsuffixesofstrorStringinrust?【发布时间】:2021-10-2100:50:06【问题描述】:我有一个字符串:“abcd”,我想:从最短到最长迭代它的前缀:""、"a"、"ab"、"abc"... 查看详情

如何在 rust 中迭代 vec 或 slice 的前缀或后缀?

】如何在rust中迭代vec或slice的前缀或后缀?【英文标题】:Howtoiterateprefixesorsuffixesofvecorsliceinrust?【发布时间】:2021-10-2013:36:39【问题描述】:我有一个vec:vec![1,2,3,4]。我想知道如何:从最短到最长迭代它的前缀:&[],&[1],&a... 查看详情

设计模式学习(18)-迭代器模式

迭代器模式  迭代器模式(IteratorPattern)是Java和.Net编程环境中非常常用的设计模式。  这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。  迭代器模式属于行为型模式。 TS版本:     ... 查看详情

为啥在 Java 中使用自定义迭代器?

】为啥在Java中使用自定义迭代器?【英文标题】:WhyuseacustomIteratorinJava?为什么在Java中使用自定义迭代器?【发布时间】:2019-01-1718:17:43【问题描述】:我知道这个问题在这个论坛上已经被问过好几次了。但是我仍然在发布,因... 查看详情

为啥迭代器指向的数据在从列表中删除后保留

】为啥迭代器指向的数据在从列表中删除后保留【英文标题】:Whyisthedatapointedbytheiteratorkept,afterdeletingitfromthelist为什么迭代器指向的数据在从列表中删除后保留【发布时间】:2014-01-1416:17:11【问题描述】:在这个示例程序中,为... 查看详情

带有向量迭代器的程序中的分段错误

】带有向量迭代器的程序中的分段错误【英文标题】:SegmentationFaultinprogramwithvectoriterators【发布时间】:2013-04-1500:29:24【问题描述】:谁能告诉我为什么它在VisualStudio中编译和运行良好,但在编译GNUC++编译器时因分段错误而失败... 查看详情

为啥使用指针的 STL 算法比 std::vector 迭代器快得多?

】为啥使用指针的STL算法比std::vector迭代器快得多?【英文标题】:WhyareSTLalgorithmsmuchfasterwithpointersthanstd::vectoriterators?为什么使用指针的STL算法比std::vector迭代器快得多?【发布时间】:2015-11-2611:45:53【问题描述】:当std::nth_eleme... 查看详情

为啥 min_element() 返回最小元素的索引,而不是迭代器?

】为啥min_element()返回最小元素的索引,而不是迭代器?【英文标题】:Whyismin_element()returningtheindexoftheminimumelement,insteadofaniterator?为什么min_element()返回最小元素的索引,而不是迭代器?【发布时间】:2019-12-3115:06:39【问题描述】... 查看详情

为啥我不能增加 std::unordered_map 迭代器?

】为啥我不能增加std::unordered_map迭代器?【英文标题】:Whycan\'tIincrementstd::unordered_mapiterator?为什么我不能增加std::unordered_map迭代器?【发布时间】:2016-06-1906:06:34【问题描述】:std::unordered_map<int,int>_cache;std::vector<std::unord... 查看详情

为啥 linq to object 手动实现迭代器?

】为啥linqtoobject手动实现迭代器?【英文标题】:Whyislinqtoobjectimplementingiteratorsmanually?为什么linqtoobject手动实现迭代器?【发布时间】:2015-09-1217:16:51【问题描述】:在浏览.net核心源代码时,我注意到即使是源代码形式的迭代器... 查看详情

为啥 c++ 顺序访问迭代器的函数签名不使用指针?

】为啥c++顺序访问迭代器的函数签名不使用指针?【英文标题】:Whydoesfunctionsignatureforc++sequentialaccessiteratornotusepointers?为什么c++顺序访问迭代器的函数签名不使用指针?【发布时间】:2019-02-2206:01:45【问题描述】:比如在这个sn-... 查看详情

在 SML Alice 中创建中缀/后缀/前缀解析器

】在SMLAlice中创建中缀/后缀/前缀解析器【英文标题】:Creatingainfix/postfix/prefixparserinSMLAlice【发布时间】:2015-04-2719:56:51【问题描述】:所以我试图在SML中创建一个解析器程序,提示用户输入一个表达式。然后它会告诉输入的表... 查看详情

为啥 foreach 将 refcount 增加 2 而不是 1?

】为啥foreach将refcount增加2而不是1?【英文标题】:Whydoesforeachincreaserefcountby2insteadof1?为什么foreach将refcount增加2而不是1?【发布时间】:2013-08-1201:58:12【问题描述】:NikiC在anotherthread中声明:就在[aforeach]迭代之前,$array被“软... 查看详情

为啥我可以在 Python for 循环中对迭代器和序列使用相同的名称?

】为啥我可以在Pythonfor循环中对迭代器和序列使用相同的名称?【英文标题】:WhycanIusethesamenameforiteratorandsequenceinaPythonforloop?为什么我可以在Pythonfor循环中对迭代器和序列使用相同的名称?【发布时间】:2014-09-0114:54:00【问题描... 查看详情

为啥返回一个迭代器低耦合(OOP)?

】为啥返回一个迭代器低耦合(OOP)?【英文标题】:WhyisreturningaIteratorlowcoupling(OOP)?为什么返回一个迭代器低耦合(OOP)?【发布时间】:2016-10-0216:55:45【问题描述】:所以我今天听说返回一个迭代器是一个更好的解决方案(... 查看详情

为啥 forEach 比常规迭代器更受欢迎?

】为啥forEach比常规迭代器更受欢迎?【英文标题】:WhyshouldforEachbepreferredoverregulariterators?为什么forEach比常规迭代器更受欢迎?【发布时间】:2018-08-3110:22:32【问题描述】:我正在阅读airbnbjavascriptguide。有一个特别的说法,说:... 查看详情

在 C++ 中,迭代器,为啥有时我使用它,有时使用 *it?

】在C++中,迭代器,为啥有时我使用它,有时使用*it?【英文标题】:inc++,iterator,whysometimeIuseitandsometimesuse*it?在C++中,迭代器,为什么有时我使用它,有时使用*it?【发布时间】:2015-02-0604:16:19【问题描述】:这个用*itintmain()std... 查看详情

为啥在 C 中前缀递增 (++x) 比后缀递增 (x++) 快? [复制]

】为啥在C中前缀递增(++x)比后缀递增(x++)快?[复制]【英文标题】:Whyisprefixincrementation(++x)fasterthanpostfixincrementation(x++)inC?[duplicate]为什么在C中前缀递增(++x)比后缀递增(x++)快?[复制]【发布时间】:2012-08-2419:29:50【问题描述】:可... 查看详情