0

A[5] 有元素 {a,b,c,d,e}

A[2] 变为空,将所有内容向右移动的最佳方法是什么,以便它们部分填充数组,将空白空间留在最左边。我知道如何使用逻辑和循环来做到这一点,我想知道是否有任何命令可以为我做到这一点?

4

1 回答 1

1

C 风格的数组没有“空”元素的概念。该元素将始终具有一个值。您可能会决定某个值表示一个空元素,但这取决于您。如果您的“空”占位符值被命名为empty,您可以执行以下操作:

auto empty_it = std::find(std::begin(arr), std::end(arr), empty);
std::rotate(empty_it, empty_it + 1, std::end(arr));

这会将第一个空元素移动到数组的后面。

最好使用std::vector,std::list或其他标准库容器。它们提供了从容器中移除元素的功能,而您不必关心移动元素。例如:

std::vector<int> v = {0, 1, 2, 3, 4, 5, 6};
v.erase(v.begin() + 3);
for (auto& x : v) {
    std::cout << x << " ";
}

这将打印0 1 2 4 5 6. 3已从容器中取出。

于 2013-02-05T22:44:03.897 回答