在 startend 修剪字元
此示例需要標題 <algorithm> , <locale> 和 <utility> 。
Version >= C++ 11
到修剪序列或字串意味著以除去所有的前緣和後元素(或字元)匹配某謂詞。我們首先修剪尾隨元素,因為它不涉及移動任何元素,然後修剪前導元素。請注意,下面的概括適用於所有型別的 std::basic_string(例如 std::string 和 std::wstring),偶然也適用於序列容器(例如 std::vector 和 std::list)。
template <typename Sequence, // any basic_string, vector, list etc.
          typename Pred>     // a predicate on the element (character) type
Sequence& trim(Sequence& seq, Pred pred) {
    return trim_start(trim_end(seq, pred), pred);
}
修剪尾隨元素包括找到與謂詞不匹配的最後一個元素,並從那裡刪除:
template <typename Sequence, typename Pred>
Sequence& trim_end(Sequence& seq, Pred pred) {
    auto last = std::find_if_not(seq.rbegin(),
                                 seq.rend(),
                                 pred);
    seq.erase(last.base(), seq.end());
    return seq;
}
修剪前導元素包括找到與謂詞不匹配的第一個元素並刪除到那裡:
template <typename Sequence, typename Pred>
Sequence& trim_start(Sequence& seq, Pred pred) {
    auto first = std::find_if_not(seq.begin(),
                                  seq.end(),
                                  pred);
    seq.erase(seq.begin(), first);
    return seq;
}
為了專門修改以上內容來修改 tihuan 中的空白,我們可以使用 std::isspace() 函式作為謂詞:
std::string& trim(std::string& str, const std::locale& loc = std::locale()) {
    return trim(str, [&loc](const char c){ return std::isspace(c, loc); });
}
std::string& trim_start(std::string& str, const std::locale& loc = std::locale()) {
    return trim_start(str, [&loc](const char c){ return std::isspace(c, loc); });
}
std::string& trim_end(std::string& str, const std::locale& loc = std::locale()) {
    return trim_end(str, [&loc](const char c){ return std::isspace(c, loc); });
}
同樣,我們可以將 std::iswspace() 函式用於 std::wstring 等。
如果你希望建立一個修剪過的副本的新序列,則可以使用單獨的函式:
template <typename Sequence, typename Pred>
Sequence trim_copy(Sequence seq, Pred pred) { // NOTE: passing seq by value
    trim(seq, pred);
    return seq;
}