迭代器列表,用于从各种列表中收集条目
List of iterators to collect entries from various lists
类TaskGroup
主要包含Task
s的列表。我想收集某些任务ta1
、ta2
、tb3
。。。来自各个组ga
、gb
、gc
。。。并在显示窗口/类中使用该列表。收集任务的选择与此问题无关。
(因为这个问题是概念性的,而不是技术性的,所以这些例子大多是伪代码。由于我在这个特定的情况下使用Qt,所以我将使用Qt类,但这个问题不应该局限于这个情况。)
class Task;
class TaskGroup {
QString name;
QList<Task> tasklist;
...
}
以上文本中的对象,ta1
等,应理解为"组ga
的第一个任务"等。
现在,这不会是一个问题:
QList<Task> collection;
collection.append(ga.getTask(1));
...
collection.append(gb.getTask(3));
...
doSomethingWithTheCollection(collection);
用例类似于"创建按列表组织的任务-->选择特定任务-->将它们添加到待办事项列表(集合)-->显示集合-->完成任务-->从集合及其原始列表中删除已完成的任务-->重复"。上述实现的问题是,我不能删除原始组中的条目(甚至不能通过引用或指针传递),因为只有对象是集合的一部分。
因此,我需要使集合成为迭代器列表!
QList<QList<Task>::iterator> collection;
collection.append(ga.getIteratorToTask(1));
...
因为我可以通过取消引用来使用相应的任务,并且在完成后,我可以通过collection[x].erase();
将其删除,然后它们从原始列表中消失。
到目前为止,我的想法是正确的吗?或者这是一个复杂的概念?
如果集合中每个列表有一个以上的请求,我必须使用QLinkedList
,因为在操作通用QList
之后,迭代器将无效。。。因此,我应该用QLinkedList
而不是QList
来实现TaskGroup
类吗?
编辑
在将这个概念付诸实践时,我失望地发现erase(iterator)
是QList
类的一部分,而不是迭代器本身的一部分。因此,我似乎无法像我希望的那样,仅通过迭代器删除原始列表中的条目。。。我需要这份清单。有什么解决办法吗?也许使用类似Java的QMutableListIterator
及其remove()
方法来代替QList<Task>::iterator
?QMutableListIterator
的缺点是不支持"迭代器算术"。(我不想传递整个列表……我可以传递一个指向相应QList<Task>::erase()
函数的函数指针吗?我知道这听起来很疯狂,但在这一点上,我想知道我的方法是否可行…)
我认为您的解决方案听起来很合理,您需要使用QLinkedList
来避免迭代器无效,这是正确的。
另一种设计是给Task
s一个指向拥有它们的TaskGroup
的返回指针,并向TaskGroup
添加一个方法来删除Task
。当CCD_ 29已经完成时,CCD_。
类似以下内容(我还没有尝试过):
void Task::Complete()
{
parent->RemoveTask(*this);
}
void TaskGroup::RemoveTask(Task& task)
{
tasklist.removeAll(task);
}
- 我如何创建一个列表,然后从中创建两个列表,其中一个用于偶数,另一个用于奇数?
- 嵌套列表,用于在 C++ 中实现邻接列表
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素
- 用于筛子的最佳数据结构是什么(即一些被划掉的数字列表)?
- Strcmp 类行为应用于C++中的对象列表
- 多个调用异步,用于C++中的更新向量或列表
- 如何对要用于模板参数的类型列表进行编码
- 用于编织链接列表元素的Runner Technique
- 复制省略用于列表初始化,它在标准中在哪里说明?
- 如何向 g++ 编译器解释如何读取用于从'list'文件中搜索 .h 文件的'include'目录列表
- 音频缓冲区列表,用于输出流格式已压缩的 AUHAL 单元
- 为什么此代码用于单个链接列表不起作用
- 如何将 const 应用于 C++ 中参数列表之外的模板参数类型?
- 用于将优先级链接移动到列表标题的算法
- 漂亮的打印不适用于C ++ STL列表
- 我的erase()函数中的bug用于链接列表
- 为什么大括号括起来的初始值设定项列表不适用于 std::array
- 算法,用于查找获取排序列表所需的最小移动元素到结束步骤
- 迭代器列表,用于从各种列表中收集条目
- 编译器错误模板参数列表用于<比较