1#ifndef MSTL_CORE_STRING_STRING_UTIL_HPP__
2#define MSTL_CORE_STRING_STRING_UTIL_HPP__
3#include "../container/vector.hpp"
8vector<string_view> MSTL_API split(string_view str, string_view delimiters,
bool skip_empty =
true);
9vector<string> MSTL_API split(
const string& str,
const string& delimiters,
bool skip_empty =
true);
11string MSTL_API join(
const vector<string>& vec,
const string& delimiter =
"");
12string MSTL_API join_fast(
const vector<string>& vec,
const string& delimiter =
"");
13string MSTL_API join_accumulate(
const vector<string> &vec,
const string &delimiter =
"");
15template <
typename Pred>
16vector<string> filter_if(
const vector<string>& vec, Pred pred) {
17 vector<string> result;
22MSTL_ALWAYS_INLINE_INLINE vector<string> filter_empty(
const vector<string>& vec) {
23 return filter_if(vec, [](
const string& s) {
return !s.empty(); });
26MSTL_ALWAYS_INLINE_INLINE vector<string> filter(
const vector<string>& vec,
const string& value_to_remove) {
27 return filter_if(vec, [&value_to_remove](
const string& s) {
28 return s != value_to_remove;
32vector<string> MSTL_API
unique(
const vector<string>& vec);
33vector<string> MSTL_API concatenate(
const vector<vector<string>>& vectors);
35vector<string> MSTL_API cartesian_product(
const vector<string>& vec1,
36 const vector<string>& vec2,
const string& connector =
"");
MSTL_NODISCARD constexpr back_insert_iterator< Container > make_back_inserter(Container &x) noexcept
创建back_insert_iterator的辅助函数
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator unique(Iterator first, Iterator last)
移除连续重复元素
constexpr Iterator2 copy_if(Iterator1 first, Iterator1 last, Iterator2 result, UnaryPredicate unary_pred)
复制满足谓词的元素