Skip to content

Instantly share code, notes, and snippets.

@onsah
Created November 7, 2018 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save onsah/f26feb39c65e28c1c36338095ec21971 to your computer and use it in GitHub Desktop.
Save onsah/f26feb39c65e28c1c36338095ec21971 to your computer and use it in GitHub Desktop.
clinl
struct test_vector_insert
{
kstd::vector<int> test_vector;
test_vector_insert() : test_vector()
{
for (int i = 1; i <= 10; ++i)
{
test_vector.push_back(i);
}
require_begin_insert();
require_middle_insert();
// Don't enable
//require_end_insert();
}
void require_begin_insert()
{ // test_vector = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
auto it = test_vector.begin();
tr.assert(test_vector[0] == 1, "test_vector_insert / index[0] before insert - require_begin_insert");
auto inserted = test_vector.insert(it, -2);
tr.assert(test_vector.size() == 11, "test_vector_insert / size - require_begin_insert");
tr.assert(*inserted == -2, "test_vector_insert / index[0] after insert - require_begin_insert");
tr.assert(*(inserted + 1) == 1, "test_vector_insert / index[1] after insert - require_begin_insert");
tr.assert(*(test_vector.end() - 1) == 10, "test_vector_insert - require_begin_insert");
}
void require_middle_insert()
{ // test_vector = {-2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
auto it = test_vector.begin() + 5;
auto inserted = test_vector.insert(it, -5);
tr.assert(*inserted == -5, "test_vector_insert - require_middle_insert");
tr.assert(*test_vector.begin() == -2, "test_vector_insert - require_middle_insert");
tr.assert(*(inserted + 1) == 5, "test_vector_insert - require_middle_insert");
}
void require_end_insert()
{
auto it = test_vector.end();
auto inserted = test_vector.insert(it, 61);
tr.assert(*inserted == 61, "test_vector_insert - require_end_insert");
tr.assert(*(inserted - 1) == 10, "test_vector_insert - require_end_insert");
}
};
iterator insert(iterator it, const T &x)
{
int index = kstd::distance(begin(), it);
reserve(1);
auto new_it = begin() + index; // It may be reallocated
for (auto iter = end() - 1; iter != new_it; --iter) {
*iter = *(iter - 1);
}
*new_it = x;
return new_it;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment