【问题标题】:In C++, is it possible to reference data-structure portions like stl list in C++?在 C++ 中,是否可以引用 C++ 中的 stl list 等数据结构部分?
【发布时间】:2017-11-16 00:09:51
【问题描述】:
list<int> a;
list<int> &b = a;

a 中添加的每个元素都将添加到b 中,a 中删除的任何元素也将在b 中删除。

我想知道,是否可以只引用结构的一部分?

类似这样的:

通用列表:[___A,___B,___C] ________A :[_______&B,__&C] ________B :[__&A,_______&C] ________C :[______________]

GeneralList = 包含所有元素 (A,B,C,D) 的列表

A = 这是一个仅引用GeneralList[B],GeneralList[C] 的列表。

B = 这是一个仅引用GeneralList[A],GeneralList[C] 的列表。

C = 一个空列表。

代码是

list<char> GeneralList;
GeneralList.push_back('A');
GeneralList.push_back('B');
GeneralList.push_back('C');
list<char> &A = {GeneralList['B'],GeneralList['C']};
list<char> &B = {GeneralList['A'],GeneralList['C']};

但我有语法错误

目标是能够从GeneralList 中消除一个元素,并且因为它在其他列表中被引用,所以消除的时间将只有 1 步。

我尝试使用结构,例如unionreference_wrapper,但我无法理解它们。 使用这种模式的原因是应该确保当一个元素更改时,另一个列表会自动更新。

目标是能够只调用一次删除。所以我不需要在其他列表中删除,复杂度会更大。 GeneralList 是一个公司的依赖关系列表,A、B、C 是相同的模块,当删除 GeneralList 的一个元素时,我是说这个模块已经安装并且已经安装了我不需要安装它在其他零件。

【问题讨论】:

  • 一个 10 行的测试程序可以回答这个问题,并牢牢记住你,而不仅仅是从随机的互联网人那里得到一个“是/否”。
  • 对不起,我只是一个第四学期的学生。我尽力了
  • 显示你的尝试
  • 您关于部分的第二个问题完全不同。您需要更清楚自己要做什么
  • 您的第一个问题让人们感到困惑,因为答案是肯定的,并且您展示了如何去做。但你的实际问题是完全不同的。对于那个答案是“不”,一些语言有“切片”(例如)允许这样的事情,但不是 c++

标签: c++ data-structures reference stl unions


【解决方案1】:

您正在描述一个视图,它可以定义为具有类似容器接口的实体,它实际上查看(并且在某些情况下可以修改)另一个容器的内容。

在 C++14 之前,标准库中没有视图。标准容器都包含自己的对象。在 C++17 中会有 string_viewarray_view,但是它们只支持查看目标容器的连续子集。您仍然需要自行实现您在问题中描述的视图。

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2011-09-05
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多