寻找 std 算法来替换简单的 for 循环

dig*_*evo 0 c++ for-loop array-algorithms c++20

库中是否有标准算法可以完成以下 for 循环的工作?

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>


int main( )
{
    const char oldFillCharacter { '-' };
    std::vector<char> vec( 10, oldFillCharacter ); // construct with 10 chars
    // modify some of the elements
    vec[1] = 'e';
    vec[7] = 'x';
    vec[9] = '{';

    const char newFillCharacter { '#' };

    for ( auto& elem : vec ) // change the fill character of the container
    {
        if ( elem == oldFillCharacter )
        {
            elem = newFillCharacter;
        }
    }

    // output to stdout
    std::copy( std::begin( vec ), std::end( vec ),
               std::ostream_iterator<char>( std::cout, " " ) );
    std::cout << '\n';
    /* prints: # e # # # # # x # { */
}
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想用单行替换上述基于范围的 for 循环。有没有什么函数可以做到这一点?我查看了std::for_each但我想它不适合这种情况。

chu*_*ill 7

此循环将替换每次出现的oldFillCharacternewFillCharacter。如果你不想做一些更花哨的std::replace看起来不错的事情:

std::replace(std::begin(vec), std::end(vec), oldFillCharacter, newFillCharacter);
Run Code Online (Sandbox Code Playgroud)

或者更简单一点std::ranges::replace

std::ranges::replace(vec, oldFillCharacter, newFillCharacter);
Run Code Online (Sandbox Code Playgroud)