CLX C++ Libraries - remove
Author: clown

CLX C++ Libraries
Home >> salgorithm >> remove

# Declarations

    String& remove(String& s, CharT c);
    String remove_copy(const String& s, CharT c);
    String& remove_if(String& s, PredicateFunc f);
    String remove_copy_if(const String& s, PredicateFunc f);

    String& unique(String& s);
    String unique_copy(const String& s);

    String& squeeze(String& s, CharT c);
    String squeeze_copy(const String& s, CharT c);
    String& squeeze_if(String& s, PredicateFunc f);
    String squeeze_copy_if(const String& s, PredicateFunc f);

# Overview

remove()，および unique() は，それぞれ STL Algorithm で定義されている std::remove()， std::unique() のラッパ関数です．STL Algorithm では実際には文字列の消去を行わないため， 代わりに後処理を行います[1]．unique() は，文字列中において連続している全ての文字を 一文字を残して消去します．これに対して squeeze() は，文字列中において引数で指定された文字 c を一文字を残して消去します．

remove_copy()，unique_copy()，squeeze_copy() は，引数として指定された文字列を直接変更せず， コピーした文字列を変更します．また，remove_if()，squeeze_if()，は，PredicateFunc で指定された Functor が真を返した文字にのみ操作を行います．

尚，Declarations においては template < ... > の部分を省略していますが， 単語の先頭が大文字になっているものはテンプレート引数として渡される型です（ただし， String は std::basic_string<CharT, Traits>）．

# Example

example_remove.cpp

    #include <iostream>
    #include <string>
    #incluhde "clx/salgorithm.h"

    int main(int argc, char* argv[]) {
        std::string s = "Hello, woooooooooorld!";

        std::cout << "original: " << s << std::endl;
        std::cout << "unique: " << clx::unique_copy(s) << std::endl;
        std::cout << "squeeze: " << clx::squeeze_copy(s, 'o') << std::endl;

        return 0;
    }

    Result
    original: Hello, woooooooooorld!
    unique: Helo, world!
    squeeze: Hello, world!

# References

1. Standard Template Library プログラミング on the Web - アルゴリズム