问题标签 [stdlist]
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.
c++ - 带指针的 STL 列表
我编写这段代码是为了尝试理解其他一些较大代码中的一个更大问题,但是在第二次迭代中,主打印中的列表出现垃圾,我不太明白这里发生了什么。诚然,我倾向于打破指针,但在这里看起来很直接,有人有任何见解吗?
performance - std::vector、QList 和 std::list 之间奇怪的(巨大的)性能差异
在编写一个处理相对大量元素(~100k)的程序时,我注意到std::list和QList之间有一个奇怪的区别。起初我使用了一个std::vector,它表现很好。但是因为程序经常需要在向量中的随机位置插入元素,所以当迭代器位于所需位置时,我切换到std::list,它具有恒定的插入时间。
问题是,std::list 在 insert() 和 push_back() 方法中的表现都比 std::vector 差。测量将 100 个连续元素添加到具有 100k 个元素的列表中,我得到:
- std::vector 约 25 毫秒(最坏的情况是在开始时添加)
- std::list 超过 600 毫秒(!)(任何位置,即使使用 push_back() 或 insert(list.begin())。
请注意,插入元素的时间不包括使用迭代器到达位置的时间。
我知道列表的性能问题是由于列表导致缓存未命中,但这似乎超出了缓存未命中的限制。此外,插入元素(具有 5 个恒定长度变量的简单结构)的时间随着列表的大小而增加。即使是获取列表大小的操作也需要更多时间。这与列表的两个操作保证的时间复杂度完全相反:常量。
见:这里
出于好奇,从std::list更改为QList和 viola:插入时间是恒定的,介于 0ms 和 1ms 之间。
这是用于测量插入时间的代码。
两个时间点之间没有执行其他操作:错误:使用了 size() 方法
标准::列表:
结果:经过:662ms
问题清单:
结果:经过:1ms
标准::向量:
结果:经过:27ms
那么,为什么 QList 和 std::list 之间存在如此巨大的差异呢?或者更好:为什么std::list的性能如此糟糕?
作为附带信息:我在 Linux (Mint) 下使用带有 gcc 的 QtEditor,并将标志设置为 c++11
编辑:
数据类型和声明:
c++ - 访问由 std::find() 找到的项目
我正在尝试自学标准模板库。目前,我正在使用std::find()
搜索std::list
.
我有测试项目是否存在的代码,它似乎工作得很好。
但是,这个应该返回匹配元素的版本不能编译。我收到错误消息“错误 C2446: ':' : no conversion from 'int' to 'std::_List_const_iterator<_Mylist>'”。
如何在第二个版本中返回指向匹配项实例的指针?
c++ - 为什么这个 c++ 程序段错误?
我真的很难确定为什么这个程序会出现段错误。我正在使用一个 std::list 包含 object 中的 objects 指针Park
。一切似乎都很好,但是当我使用列表的迭代器并尝试调用一些对象方法时,它会出现段错误。
我发现如果我修改std:list<Felid*>
to的类型std:list<Felid*>*
,就没有更多的段错误了。我想了解为什么这是有效的?
我用 g++ 编译它:g++ -g -Wall -std=c++11 main.cpp
main.cpp
:
c++ - 如何遍历 std::list在这段代码中
我想在该块内的 list2 之后遍历 list1 。请告诉如何做到这一点。我猜想为什么那行不通,但不知道如何实现
问题出在其他部分,如果阻止即。迭代 list1 和list1.size(); ..
c++ - C++ std::list 插入问题
在过去的几天里,我已经在这里待了几个小时,并尽我所能在网上搜索这个问题的答案,但我被困住了。就在我认为 MSDN 为我提供了答案时,我仍然遇到了问题。我有一个InstalledPrograms.h
带有class InstalledProgram{}
.
三个构造函数
我宣布名单:list<InstalledProgram> ProgramList;
将其传递给此函数:
像这样
做一些事情,我在代码中找到了需要在列表中插入一个新实例的点:
paramProgramList.insert(paramProgramList.end(), new InstalledProgram(Name));
我遇到的问题是“。” 在插入之前显示“没有重载函数的实例与参数列表匹配”,并且周围的括号InstalledProgram(Name)
显示“没有参数类型的构造函数实例 (System::String ^)”。
我不明白为什么。
任何帮助,将不胜感激。
c++ - 将本地类函数指针传递给 std::list::sort
我正在尝试使用本地函数对成员变量类型 std::list 进行排序。由于 C++ 不允许本地函数,因此 Herb Sutter 建议使用本地类,因此我最终得到了以下代码。但我不确定如何将函数指针传递给std::list::sort()
函数。
我收到编译器错误
模板参数不能引用本地类型
谢谢
c++ - 我在哪里可以找到 c++ std API - 例如 std::list 的 api
我正在为学校做一些功课,我想研究 std::list 的 api,因为我应该实现自己的一个。我想实现一个与 std 类似的接口,以便以后可以舒适地使用我自己的列表。
谢谢。
c++ - 复制指针列表没有循环
我有一个指向某个对象的指针的列表。我想复制列表但使用新指针。
我的意思是列表中的每个元素,对对象做新的并将新地址插入新列表中。
我尝试使用:
在调用函数后,我得到了具有相同指针的新列表...... tmp 的值没有改变......我怎样才能在不使用任何循环的情况下解决这个问题?谢谢。
c++ - 增加一个元素后对列表进行排序
编辑:我不能使用排序功能。我必须做一个程序,它有一个有机体排名列表,每个有机体都有自己的 ID,排名必须按儿子数量递减排序,如果两个有机体有相同数量的儿子,则按 ID 递增排序. 在增加一种生物的儿子数量之后,我制定了以下算法:
但它效果不佳,因为当我在插入一些生物后打印排名时,有时排序很差。我会很感激你的帮助。我只能使用以下操作:
对不起,如果我表达自己不好,我的母语不是英语。