我正在尝试将 Java 项目转换为 C++ 项目。在 Java 项目中,我使用了 ArrayList,但我不知道处理我在 C++ 中所做的事情的最佳方式。
目前我正在使用 std::vector 因为它允许访问任意位置的元素,并且因为它有一个插入方法。像 Java ArrayList 一样,我希望能够在向量中的某个位置 (int p) 插入一个元素,并将当前位于 p 的元素(如果有)转移到 p+1。并且随后的元素也将被转移。
单个条目的 std::vector.insert 如下所示:
iterator insert (iterator position, const value_type& val);
和来自http://www.cplusplus.com/reference/vector/vector/insert/的描述说
因为向量使用数组作为其底层存储,所以在向量末端以外的位置插入元素会导致容器将位置之后的所有元素重新定位到它们的新位置。
这是否意味着插入实际上将新元素放在 p+1 而不是 p?它是否也不会移动当前位于 p 的元素?
另外,为什么 insert 方法需要一个迭代器而不是一个数字索引?我没有看到优势。它只是使在任意位置插入变得更加困难。是否有某种方法可以将迭代器构造为位于特定位置而不必在那里进行迭代?我只在http://www.cplusplus.com/reference/iterator/RandomAccessIterator/看到比较