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 - アルゴリズム