add vector push_n
parent
ef5951577d
commit
e89448af70
|
@ -305,6 +305,19 @@ public:
|
||||||
return p_buf.first()[p_len++];
|
return p_buf.first()[p_len++];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Range push_n(const T *v, Size n) {
|
||||||
|
reserve(p_len + n);
|
||||||
|
if (IsPod<T>()) {
|
||||||
|
memcpy(p_buf.first() + p_len, v, n * sizeof(T));
|
||||||
|
} else {
|
||||||
|
for (Size i = 0; i < n; ++i)
|
||||||
|
allocator_construct(p_buf.second(),
|
||||||
|
&p_buf.first()[p_len + i], v[i]);
|
||||||
|
}
|
||||||
|
p_len += n;
|
||||||
|
return Range(&p_buf.first()[p_len - n], &p_buf.first()[p_len]);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename ...U>
|
template<typename ...U>
|
||||||
T &emplace_back(U &&...args) {
|
T &emplace_back(U &&...args) {
|
||||||
if (p_len == p_cap) reserve(p_len + 1);
|
if (p_len == p_cap) reserve(p_len + 1);
|
||||||
|
|
|
@ -84,7 +84,10 @@ int main() {
|
||||||
assert(w.front() == 5);
|
assert(w.front() == 5);
|
||||||
assert(w.back() == 5);
|
assert(w.back() == 5);
|
||||||
|
|
||||||
assert(to_string(w) == "{5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5}");
|
int pushn[] = { 3, 2, 1 };
|
||||||
|
w.push_n(pushn, 3);
|
||||||
|
|
||||||
|
assert(to_string(w) == "{5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 3, 2, 1}");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Loading…
Reference in New Issue