【问题标题】:Inserting and deleting from sequences C++从序列 C++ 中插入和删除
【发布时间】:2015-06-18 13:21:31
【问题描述】:

我在一本书中读到这个,并且正在粘贴文本。我截图了,但声望不够,所以......

序列

您可以通过添加要求来完善基本容器概念。 序列是一个重要的细化,因为几个 STL 容器类型——deque、forward_list (C++11)、list、queue、 priority_queue、stack 和 vector——是序列。 (回想一下队列 允许在后端添加元素并从 front.A 双端队列,由 deque 表示,允许添加和 两端删除。)要求迭代器至少是一个 前向迭代器保证元素排列在一个 从一个迭代周期到 下一个。数组类也被归类为序列容器, 虽然它不能满足所有的要求。序列也 要求其元素按严格的线性顺序排列。也就是说, 有第一个元素,有最后一个元素,每个元素 但是第一个和最后一个正好在它前面有一个元素 和紧随其后的一个元素。一个数组和一个链表是 序列的例子,而一个分支结构(其中每个 节点指向两个子节点)不是。

因为序列中的元素有一定的顺序,所以诸如 在特定位置插入值并擦除特定位置 范围成为可能。表 16.7 列出了这些和其他操作 需要一个序列。该表使用与表相同的符号 16.5,加上 t 表示 T 类型的值——即存储在容器中的值的类型,n 为整数,p 为 q、i 和 j,代表迭代器。

第二段的开头,它说序列有一定的顺序需要维护,因此插入和删除元素是可能的。这不是破坏了维持某种秩序的整个事情吗?请帮忙。这让我发疯。谢谢。

【问题讨论】:

  • 它说有,不必维护
  • 有什么区别?如果您暗示订单就在那里并且不需要维护,那么为什么还要提及它呢?
  • 由于您引用了很多文字,请添加对来源的引用。它可能对其他人有用,并且对版权所有者有礼貌。
  • @user3143420 有一个顺序,所以当你想在i'th 元素之后添加一个元素时,我们可以找到ith 元素
  • 来自《C++ Primer Plus 6th Edition》一书

标签: c++ containers sequences concept


【解决方案1】:

有些容器是有序的,有些是排序的,有些两者都是,有些两者都不是。例如:

std::liststd::vector排序,但未排序(除非您特意这样做)。

std::mapstd::set 都是排序的排序的

std::unordered_mapstd::unordered_setunorderedunsorted (它们基本上是哈希图)

insert、delete、push、pop 等函数都考虑了这些容器要求。对于已排序的容器,insert 必须确保元素插入正确的位置,其余元素根据需要进行调整。

序列必须是有序的,但不一定是有序的。

因此,当您说要在索引 i 处插入元素 e 时,该概念仅对有序容器有意义,因为无序容器没有索引或位置的概念。

你必须小心的一件事(除其他外)是如果你有一个容器的迭代器,经常修改容器(插入、删除等)可能会使迭代器无效,这会带来像@这样的事情987654321@

这是一个(有点不完整的)图表,显示了各种 C++ 标准库容器的属性。

David Moorelicensed CC BY-SA 3.0创建

【讨论】:

  • 我有点困惑。我在文中清楚地读到所有序列都是有序的,而不是你所说的。
  • 我对我的术语非常慎重,尽管我应该更明确地说明区别。 “序列”是“容器”的子集。我给出的所有示例都是“容器”,但只有 std::liststd::vector 会被视为“序列”(std::stringstd::deque 等也是如此)
  • 哦,好吧。但是向量也没有明确的顺序。他们一直这样做,直到他们被修改,但这就是修改某些东西的全部内容。如果向量有明确的顺序,那么就不可能以任何方式修改元素。
  • @user3143420 再次将有序与排序混淆
  • @OthmanBenchekroun 考虑这个向量:vector vec; vec.push_back(10); vec.push_back(4); vec.push_back(100);元素绝不是排序的。但是,如果我在 4 之后在向量中插入一个元素,会不会破坏顺序?
【解决方案2】:

在序列中插入元素需要作为参数你想要放置的位置(擦除相同),

为了使“ith 位置”有意义,应该有一个顺序

不能将有序与排序混淆...排序我们需要一个比较器,有序也可能意味着索引(我认为)

顺序:4 5 2 是有序的,先是 4,然后是 5,然后是 2 并且序列 5 2 4 也是有序的

【讨论】:

  • 正是我想说的。那么数组在顺序方面是否被认为是一个序列,即具有索引功能?
猜你喜欢
  • 2015-10-18
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
相关资源
最近更新 更多