std::remove的用法
时间: 2024-06-17 17:07:37 浏览: 202
std::remove是C++标准库中的一个算法,用于在指定区间内移除某个特定值。具体来说,它会将所有等于该特定值的元素移到区间的末尾,并返回一个迭代器,指向被移除元素的结束位置。
下面是该函数的语法:
```cpp
template< class ForwardIt, class T >
ForwardIt remove( ForwardIt first, ForwardIt last, const T& value );
```
其中,`first`和`last`分别指定了要移除元素的区间;`value`是要被移除的特定值。
需要注意的是,std::remove并不会真正删除元素,它只是将等于特定值的元素移到区间末尾,并返回一个新的迭代器。如果想要真正删除元素,需要配合erase函数使用。
相关问题
std::remove ,std::copy_if ,std::partition,std::unique,std::unique_copy的用法
这些都是C++标准库中的算法函数,具体用法如下:
1. std::remove
这个函数可以用于从一个容器中移除指定值,它的用法如下:
```
template< class ForwardIt, class T >
ForwardIt remove( ForwardIt first, ForwardIt last, const T& value );
```
其中,`first` 和 `last` 分别表示迭代器的起始和结束位置,`value` 表示要移除的值。该函数返回指向新的结束位置的迭代器,被移除的元素仍然存在于容器中,只是处于未定义状态,需要使用 erase 函数删除。
2. std::copy_if
这个函数可以用于将满足指定条件的元素拷贝到目标容器中,它的用法如下:
```
template< class InputIt, class OutputIt, class UnaryPredicate >
OutputIt copy_if( InputIt first, InputIt last, OutputIt d_first, UnaryPredicate pred );
```
其中,`first` 和 `last` 分别表示迭代器的起始和结束位置,`d_first` 表示目标容器的起始位置,`pred` 是一个一元谓词,用于指定拷贝条件。
3. std::partition
这个函数可以用于将容器中满足指定条件的元素移动到容器的前面,不满足条件的元素移动到后面,它的用法如下:
```
template< class BidirectionalIt, class UnaryPredicate >
BidirectionalIt partition( BidirectionalIt first, BidirectionalIt last, UnaryPredicate pred );
```
其中,`first` 和 `last` 分别表示迭代器的起始和结束位置,`pred` 是一个一元谓词,用于指定移动条件。该函数返回一个迭代器,指向最后一个满足条件的元素之后的位置。
4. std::unique
这个函数可以用于移除相邻的重复元素,它的用法如下:
```
template< class ForwardIt >
ForwardIt unique( ForwardIt first, ForwardIt last );
```
其中,`first` 和 `last` 分别表示迭代器的起始和结束位置。该函数返回指向新的结束位置的迭代器,被移除的元素仍然存在于容器中,只是处于未定义状态,需要使用 erase 函数删除。
5. std::unique_copy
这个函数可以用于将相邻的重复元素去重后拷贝到目标容器中,它的用法如下:
```
template< class InputIt, class OutputIt >
OutputIt unique_copy( InputIt first, InputIt last, OutputIt d_first );
```
其中,`first` 和 `last` 分别表示迭代器的起始和结束位置,`d_first` 表示目标容器的起始位置。该函数返回指向新的结束位置的迭代器,被移除的元素仍然存在于容器中,只是处于未定义状态,需要使用 erase 函数删除。
std::remove ,std::copy_if ,std::partition,std::unique,std::unique_copy的用法,给出例子
这些都是C++ STL中的算法,用于对容器中的元素进行处理。下面分别给出每个算法的用法和示例:
1. std::remove: 从容器中删除指定的元素
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 2, 4, 2, 5};
auto it = std::remove(vec.begin(), vec.end(), 2); // 删除所有值为2的元素
vec.erase(it, vec.end()); // 删除多余的元素
for (auto x : vec) {
std::cout << x << " "; // 输出:1 3 4 5
}
return 0;
}
```
2. std::copy_if: 将符合条件的元素复制到新的容器中
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int> odd_vec;
std::copy_if(vec.begin(), vec.end(), std::back_inserter(odd_vec), [](int x) { return x % 2 == 1; }); // 复制所有奇数到odd_vec中
for (auto x : odd_vec) {
std::cout << x << " "; // 输出:1 3 5
}
return 0;
}
```
3. std::partition: 将容器中的元素按照条件分为两部分,满足条件的在前面,不满足条件的在后面
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = std::partition(vec.begin(), vec.end(), [](int x) { return x % 2 == 1; }); // 将容器中的元素按照奇偶分为两部分
for (auto x : vec) {
std::cout << x << " "; // 输出:1 5 3 4 2
}
return 0;
}
```
4. std::unique: 删除容器中相邻的重复元素
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 3, 3, 4, 5, 5};
auto it = std::unique(vec.begin(), vec.end()); // 删除相邻的重复元素
vec.erase(it, vec.end()); // 删除多余的元素
for (auto x : vec) {
std::cout << x << " "; // 输出:1 2 3 4 5
}
return 0;
}
```
5. std::unique_copy: 将容器中相邻的重复元素复制到新的容器中
```cpp
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 3, 3, 4, 5, 5};
std::vector<int> unique_vec;
std::unique_copy(vec.begin(), vec.end(), std::back_inserter(unique_vec)); // 将相邻的重复元素复制到unique_vec中
for (auto x : unique_vec) {
std::cout << x << " "; // 输出:1 2 3 4 5
}
return 0;
}
```
阅读全文