从对这些项

时间:2017-09-19 05:24:18

标签: c++ pointers vector reference doubly-linked-list

我有一个整数向量,我需要执行大量的移动,砍伐和更改列表。但是......我主要需要根据它们的价值来访问这些项目。

所以我已经想到了使用std :: list(双链表)的想法,这将有助于重新排序操作。然后还要创建一个由整数值索引的向量,其中值是对std :: list项的引用的向量。这样我就不必迭代整个链表来查找列表中的特定值,因为我将使用这些较小的引用向量。

我无法弄清楚如何设置它。

以下是我尝试过的示例:

vector<int> original = { 1, 1, 0, 2, 1, 3, 1, 0 };
vector<vector<int*>> byNumber(4);
list<int> linkedList;
for (int i = 0; i < original.size(); ++i) {
    linkedList.push_back(original[i]);
    byNumber[original[i]].push_back(*linkedList[i]);
}

将“原始”项目推送到linkedList非常简单,但是在byNumber中创建引用是我坚持的地方。我也试过推进&(*linkedList[i])。我不清楚我可以用什么语法来做这件事,以及它是否有可能。我还涉及使用unique_ptr而不是int *,如果问题太多,我可以转回去。

2 个答案:

答案 0 :(得分:1)

根据使用迭代器的建议,我想出了这个。但如果有人有更严格的解决方案,我很乐意听到它。

vector<int> original = { 1, 1, 0, 2, 1, 3, 1, 0 };
vector<vector<list<int>::iterator>> byNumber(4);
list<int> linkedList;
list<int>::iterator it;
for (int i = 0; i < original.size(); ++i) {
    linkedList.push_back(original[i]);
    it = linkedList.begin();
    advance(it, i);
    byNumber[original[i]].push_back(it);
}

答案 1 :(得分:0)

下面:

vector<vector<int*>> byNumber(4);

您正在存储指针,而不是引用。你可以这样做:

vector<vector<int&>> byNumber(4);

但为什么不存储迭代器,如下所示:

vector<vector<vector<int>::iterator>> byNumber(4);