我有一个类型为Foo*的std :: list和另一个大小不等的Bar*类型.这两种类型都实现了一个定位系统,该系统允许列表按z坐标对绘制顺序进行排序(实际上只是一个带有x,y,z值的点,它们按照z值小于谓词函数进行排序).
除了上面提到的,它们完全不同.有没有办法组合列表,以便我可以相互比较所有z值,而不仅仅是他们自己的类型?
现在,例如,要么对所有Foos进行排序,要么对所有条形图进行排序; 然后要么绘制所有的Foos,要么绘制所有的条形图.这使得即使条形图具有比Foo低的z,它也将被绘制在顶部.显然不是预期的结果.
打字时我确实有顿悟,并行处理工作?分别对每个列表进行排序,然后交替绘制它们,Foo,Bar,Foo,Bar等,否则会导致同样的问题?有些人不顾z值而高于其他人?
谢谢.
我有一个班级,每个实例都应该被考虑,创造和破坏要严格控制.不允许随机移动,复制,临时 - 一旦通过专用函数创建,实例只能通过引用和指针"传递".
为此,我删除了这个类的复制构造函数和赋值运算符.
这些实例意味着保存在std :: list中,由emplace_back()创建,按需删除,从不打算移动.但我收到有关已删除的复制构造函数的错误.
In constructor 'std::_List_node<_Tp>::_List_node(_Args&& ...)
error: deleted function 'Reader::Reader(const Reader&)
stl_list.h:103: error: used here
Run Code Online (Sandbox Code Playgroud)
有没有办法让这项工作?std :: list的一些替代方案,我不需要手工雕刻?
在 STL 中,创建动态分配数组的方法之一是创建列表。当列表超出范围时,将调用每个元素的析构函数并删除列表。有没有办法在列表超出范围之前销毁列表(更重要的是释放所使用的内存),如果可能的话,最好的方法是什么?delete[] 或 list::clear() 可以完成这项工作吗?
我试图控制我正在开发的程序的工作流程.为此,我有一个map< unsigned int, list < unsigned int > >
第一个键将是id,第二个键(列表)将用于知道我是否正确结束所有任务.我在此列表中使用的唯一操作是:
myMap[iD].size()
myMap[iD].push_back(foo) <- ( foo is an unsigned int )
for (std::list<unsigned int>::iterator it=myMap[iD].begin(); it != myMap[iD].end(); ++it){
myMap[iD].erase(it)
}
Run Code Online (Sandbox Code Playgroud)
我的地图长度可以增长到1452个元素,每个元素列表大小可以从1000到5000的数量级.
当我运行程序时,有时会收到分段错误,有时会出现错误的分配错误.我的猜测是,这来自push_back,因为:
这是我使用地图的代码中唯一的部分:
if (FOO != 0){
if (PID != 0){
if ( myMap.size() + 5 < myMap.max_size()){
if (myMap[PID].size() > 1000) myMap[PID].pop_front();
myMap[PID].push_back(EVENTVALUE);
}
}
} else {
if (PID != 0 and foo2 != 0 and myMap.find(PID) != myMap.end()) {
for (std::list<unsigned int>::iterator it=myMap[PID].begin(); …
Run Code Online (Sandbox Code Playgroud)