用C++设计函数,实现删除向量中所有重复元素的功能。要求:尽可能避免数据大量移动。(保持原始数据顺序,不用unordered_set,不用unordered_map, 用using namespace std)
时间: 2024-09-29 20:06:03 浏览: 36
在C++中,你可以使用STL提供的`std::vector`和`std::unique`算法来设计一个函数,这个函数可以删除向量中的重复元素而不需要大量数据移动。这里是一个示例:
```cpp
#include <algorithm> // 引入unique算法
// 函数模板,用于删除向量中所有重复元素并保持原顺序
template<typename T>
void removeDuplicates(std::vector<T>& vec) {
if (vec.empty()) return; // 如果向量为空,直接返回
vec.erase(unique(vec.begin(), vec.end()), vec.end()); // 使用unique()找到唯一元素的位置,erase()删除多余部分
}
int main() {
std::vector<int> numbers = {1, 2, 2, 3, 4, 4, 5};
removeDuplicates(numbers);
for (const auto& num : numbers) {
std::cout << num << " ";
}
std::cout << "\n"; // 输出 [1 2 3 4 5]
return 0;
}
```
在这个例子中,`std::unique`会返回一个指向向量中新唯一元素结束位置的迭代器,然后`std::erase`会删除从原位置到结束的所有重复项。这种方法的优点在于它的时间复杂度为O(n),其中n是向量的长度,因为它只需要一次遍历。
阅读全文