Yes, std::ranges::replace()
can be used with containers that do not support random access iterators.
This includes containers like std::list
or std::forward_list
. The std::ranges::replace()
algorithm works with any container that provides input iterators.
Here's an example using std::list
:
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> Source{1, 2, 3, 3, 3, 4, 5};
std::ranges::replace(Source, 3, 0);
std::cout << "Modified list: ";
for (const auto &num : Source) {
std::cout << num << ", ";
}
}
Modified list: 1, 2, 0, 0, 0, 4, 5,
std::ranges::replace()
with Different Containersstd::list
container: Supports bidirectional iterators, allowing std::ranges::replace()
to traverse and modify elements.std::forward_list
container: Supports forward iterators, making it compatible with std::ranges::replace()
.Example with std::forward_list
:
#include <algorithm>
#include <forward_list>
#include <iostream>
int main() {
std::forward_list<int> Source{
1, 2, 3, 3, 3, 4, 5};
std::ranges::replace(Source, 3, 0);
std::cout << "Modified forward_list: ";
for (const auto &num : Source) {
std::cout << num << ", ";
}
}
Modified forward_list: 1, 2, 0, 0, 0, 4, 5,
std::ranges::replace()
works with non-random access iterators, the performance may differ compared to random access containers like std::vector
.Using std::ranges::replace()
with non-random access iterators expands its versatility, making it applicable to a wide range of container types in C++.
Answers to questions are automatically generated and may not have been reviewed.
An overview of the key C++ standard library algorithms for replacing objects in our containers. We cover replace()
, replace_if()
, replace_copy()
, and replace_copy_if()
.