28 #ifndef YB_INC_ystdex_container_hpp_
29 #define YB_INC_ystdex_container_hpp_ 1
48 template<
class _tSeqCon>
61 using reference =
typename container_type::reference;
63 using iterator =
typename container_type::iterator;
66 using size_type =
typename container_type::size_type;
78 :
base(std::move(first), std::move(last))
103 static_cast<base&
>(*this) =
static_cast<base&&
>(con);
121 == static_cast<const container_type&>(y);
126 using container_type::begin;
128 using container_type::end;
130 using container_type::cbegin;
132 using container_type::cend;
137 return base::swap(static_cast<container_type&>(
c));
142 using base::max_size;
153 template<
class _tSeqCon>
161 template<
class _tSeqCon>
180 template<
class _tSeqCon>
203 :
base(std::move(first), std::move(last))
225 static_cast<base&
>(*this) =
static_cast<base&&
>(con);
243 == static_cast<const container_type&>(y);
248 using container_type::insert;
250 using container_type::erase;
252 using container_type::clear;
263 template<
class _tSeqCon>
271 template<
class _tSeqCon>
287 template<
class _tCon,
typename... _tParams>
293 template<
class _tCon,
typename _type,
size_t _vN>
297 c.assign(arr, arr + _vN);
307 template<
typename _tCon>
321 template<
typename... _tParams>
324 -> decltype(
container->insert(std::forward<_tParams>(
args)...))
336 template<
typename _tCon,
typename... _tParams>
348 template<
class _tCon,
typename _tKey>
350 exists(
const _tCon& con,
const _tKey& key,
351 decltype(std::declval<_tCon>().count()) = 1U)
353 return con.count(key) != 0;
355 template<
class _tCon,
typename _tKey>
357 exists(
const _tCon& con,
const _tKey& key, ...)
359 return con.find(key) != end(con);
371 template<
class _tCon,
typename _tKey>
373 exists(
const _tCon& con,
const _tKey& key)
385 template<
typename _tRange>
387 erase_all(_tRange& c,
const typename _tRange::value_type& val)
389 c.erase(std::remove(begin(c), end(c), val), end(c));
397 template<
typename _tCon,
typename _tFwd,
typename _tValue>
414 template<
typename _tRange,
typename _fPred>
418 c.erase(std::remove_if(begin(c), end(c), pred), end(c));
426 template<
typename _tCon,
typename _tFwd,
typename _fPred>
443 template<
typename _tRandom>
447 std::sort(first, last);
448 return std::unique(first, last);
456 template<
class _tCon>
473 template<
class _tMap>
474 std::pair<typename _tMap::iterator, bool>
477 const auto i(m.lower_bound(k));
479 return std::make_pair(i, (i == m.end() || m.key_comp()(k, i->first)));
487 template<
typename _type,
typename... _tParams>
488 inline std::array<_type,
sizeof...(_tParams)>
499 template<
typename _type,
typename... _tParams>
500 inline std::array<_type,
sizeof...(_tParams)>
512 template<
typename _type,
size_t _vN,
typename _tSrc>
516 return std::array<_type, _vN>(src);
518 template<
typename _type,
size_t _vN>
524 template<
typename _type,
size_t _vN,
typename _tSrcElement>
525 inline std::array<_type, _vN>
528 std::array<_type, _vN> arr;
530 std::copy_n(std::addressof(src[0]), _vN, std::addressof(arr[0]));
533 template<
typename _type,
size_t _vN,
typename _tSrcElement>
534 inline std::array<_type, _vN>
537 std::array<_type, _vN> arr;
539 std::copy_n(std::make_move_iterator(std::addressof(src[0])), _vN,
540 std::addressof(arr[0]));
void assign(_tCon &c, _tParams &&...args)
插入参数指定的元素到容器。
container_adaptor(size_type n)
typename container_type::const_reference const_reference
static auto first(const _tIterator &i) -> decltype((i->first))
container_adaptor & operator=(const container_adaptor &)=default
满足容器要求。
container_inserter(_tCon &c)
bool operator!=(nullptr_t lhs, const _type &rhs)
void seq_insert(_tCon &c, _tParams &&...args)
顺序插入值至指定容器。
void swap(sequence_container_adaptor< _tSeqCon > &x, sequence_container_adaptor< _tSeqCon > &y)
yconstfn const string _tParams && args
std::array< _type, _vN > to_array(const _tSrc &src)
取指定参数转换为 std::array 对象。
sequence_container_adaptor & operator=(std::initializer_list< value_type > il)
typename base::container_type container_type
sequence_container_adaptor & operator=(const sequence_container_adaptor &)=default
typename container_type::size_type size_type
typename container_type::const_iterator const_iterator
typename container_type::difference_type difference_type
sequence_container_adaptor(size_type n)
sequence_container_adaptor(size_type n, const value_type &value)
std::pair< typename _tMap::iterator, bool > search_map(_tMap &m, const typename _tMap::key_type &k)
按指定键值搜索指定映射。
#define yforward(_expr)
根据参数类型使用 std::forward 传递对应参数。
void seq_apply(_fCallable &&)
顺序递归调用。
CompactPixmapEx & operator=(const CompactPixmapEx &buf)
sequence_container_adaptor(_tIn first, _tIn last)
typename container_type::value_type value_type
满足容器要求。
void swap(any &x, any &y)
交换对象。
void assign(_tCon &c, const _type(&arr)[_vN])
#define ynothrow
YSLib 无异常抛出保证:若支持 noexcept 关键字, 指定特定的 noexcept 异常规范。
bool exists(const _tCon &con, const _tKey &key, decltype(std::declval< _tCon >().count())=1U)
auto operator()(_tParams &&...args) -> decltype(container->insert(std::forward< _tParams >(args)...))
typename container_type::iterator iterator
std::array< _type, sizeof...(_tParams)> forward_as_array(_tParams &&...args)
取指定参数转移至 std::array 对象。
#define yconstfn
指定编译时常量函数。
typename container_type::reference reference
void swap(container_adaptor &c)
container_adaptor(_tIn first, _tIn last)
_tRandom sort_unique(_tRandom first, _tRandom last)
排序指定序列范围,保留不重复元素的区间。
sequence_container_adaptor(std::initializer_list< value_type > il)
friend bool operator==(const sequence_container_adaptor &x, const sequence_container_adaptor &y)
满足容器要求。
std::array< _type, sizeof...(_tParams)> make_array(_tParams &&...args)
取指定参数初始化的 std::array 对象。
container_adaptor(size_type n, const value_type &value)
void erase_all_if(_tRange &c, _fPred pred)
删除指定序列范围中满足条件的元素。
bool exists(const _tCon &con, const _tKey &key)
判断指定的容器中存在指定的键。
friend bool operator==(const container_adaptor &x, const container_adaptor &y)
满足容器要求。
container_adaptor()=default
sequence_container_adaptor()=default
满足序列容器要求。
container_adaptor & operator=(std::initializer_list< value_type > il)
container_adaptor(std::initializer_list< value_type > il)
container_adaptor< _tSeqCon > base
void erase_all(_tRange &c, const typename _tRange::value_type &val)
删除指定序列范围中和指定值的相等的元素。
decay_t< _type > decay_copy(_type &&arg)
退化复制。