vectorクラスまとめ
C++でよく使われるvectorクラスだが、メソッドがよく分からなかったので、サンプルを全部詰め込んでみた。
ソースコード
#include <array> #include <iostream> #include <vector> std::vector<int>& init() { static std::vector<int> v = {1, 99, 4}; return v; } int dump(const std::vector<int>& v) { std::cout << " elem = {"; for (int x : v) { std::cout << " " << x; } std::cout << " } "; std::cout << "( size = " << v.size(); std::cout << ", max_size = " << v.max_size(); std::cout << ", capacity = " << v.capacity(); std::cout << ", empty = " << v.empty(); std::cout << " )" << std::endl; } void t1() { std::vector<int> v1 = init(); const std::vector<int>& cv1 = v1; std::cout << "initial" << std::endl; dump(v1); std::cout << "begin(), end()" << std::endl; for (decltype(v1)::iterator i = v1.begin(); i != v1.end(); ++i) { std::cout << " " << *i; } std::cout << std::endl; for (decltype(v1)::const_iterator i = cv1.begin(); i != cv1.end(); ++i) { std::cout << " " << *i; } std::cout << std::endl; std::cout << "rbegin(), rend()" << std::endl; for (decltype(v1)::reverse_iterator i = v1.rbegin(); i != v1.rend(); ++i) { std::cout << " " << *i; } std::cout << std::endl; for (decltype(v1)::const_reverse_iterator i = cv1.rbegin(); i != cv1.rend(); ++i) { std::cout << " " << *i; } std::cout << std::endl; } void t2() { const std::vector<int> v1 = init(); std::cout << "initial" << std::endl; dump(v1); std::cout << "cbegin(), cend()" << std::endl; for (decltype(v1)::const_iterator i = v1.cbegin(); i != v1.cend(); ++i) { std::cout << " " << *i; } std::cout << std::endl; std::cout << "crbegin(), crend()" << std::endl; for (decltype(v1)::const_reverse_iterator i = v1.crbegin(); i != v1.crend(); ++i) { std::cout << " " << *i; } std::cout << std::endl; } void t3() { std::vector<int> v1 = init(); std::cout << "initial" << std::endl; dump(v1); std::cout << "v1.resize(5)" << std::endl; v1.resize(5); dump(v1); std::cout << "v1.resize(2)" << std::endl; v1.resize(2); dump(v1); std::cout << "v1.reserve(10)" << std::endl; v1.reserve(10); dump(v1); std::cout << "v1.shrink_to_fit()" << std::endl; v1.shrink_to_fit(); dump(v1); } void t4() { std::vector<int> v1 = init(); std::cout << "initial" << std::endl; dump(v1); std::cout << "v1[0] = 3" << std::endl; v1[0] = 3; dump(v1); std::cout << "v1.at(1)" << std::endl; std::cout << " " << v1.at(1) << std::endl; std::cout << "v1.data()" << std::endl; int* p = v1.data(); std::cout << " *p = " << *p << std::endl; std::cout << " *(++p) = " << *(++p) << std::endl; std::cout << "v1.front()" << std::endl; int& f = v1.front(); std::cout << " f = " << f << std::endl; std::cout << "v1.back()" << std::endl; int& b = v1.back(); std::cout << " b = " << b << std::endl; } void t5() { std::vector<int> v1 = init(); std::cout << "initial" << std::endl; dump(v1); std::cout << "v1.push_back(999)" << std::endl; v1.push_back(999); dump(v1); std::cout << "v1.pop_back()" << std::endl; v1.pop_back(); dump(v1); std::cout << "v1.insert(v1.begin() + 1, 9999)" << std::endl; v1.insert(v1.begin() + 1, 9999); dump(v1); std::cout << "v1.erase(v1.begin() + 2)" << std::endl; v1.erase(v1.begin() + 2); dump(v1); std::cout << "v1.clear()" << std::endl; v1.clear(); dump(v1); std::cout << "v1.assign({ 4, 3, 2, 1 })" << std::endl; const std::array<int, 4> a = { 4, 3, 2, 1 }; v1.assign(a.begin(), a.end()); dump(v1); } void t6() { std::vector<int> v1; std::cout << "v1.emplace_back(5)" << std::endl; v1.emplace_back(5); dump(v1); std::vector<int> v2; std::cout << "v2.emplace(v2.begin(), 5)" << std::endl; v2.emplace(v2.begin(), 5); dump(v2); } void t7() { std::vector<int> v1 = { 1, 2, 3 }; std::vector<int> v2 = { 4, 5, 6 }; std::cout << "v1.swap(v2)" << std::endl; dump(v1); dump(v2); v1.swap(v2); dump(v1); dump(v2); } int main() { t1(); t2(); t3(); t4(); t5(); t6(); t7(); return EXIT_SUCCESS; }
実行結果
initial elem = { 1 99 4 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) begin(), end() 1 99 4 1 99 4 rbegin(), rend() 4 99 1 4 99 1 initial elem = { 1 99 4 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) cbegin(), cend() 1 99 4 crbegin(), crend() 4 99 1 initial elem = { 1 99 4 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) v1.resize(5) elem = { 1 99 4 0 0 } ( size = 5, max_size = 4611686018427387903, capacity = 6, empty = 0 ) v1.resize(2) elem = { 1 99 } ( size = 2, max_size = 4611686018427387903, capacity = 6, empty = 0 ) v1.reserve(10) elem = { 1 99 } ( size = 2, max_size = 4611686018427387903, capacity = 10, empty = 0 ) v1.shrink_to_fit() elem = { 1 99 } ( size = 2, max_size = 4611686018427387903, capacity = 2, empty = 0 ) initial elem = { 1 99 4 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) v1[0] = 3 elem = { 3 99 4 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) v1.at(1) 99 v1.data() *p = 3 *(++p) = 99 v1.front() f = 3 v1.back() b = 4 initial elem = { 1 99 4 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) v1.push_back(999) elem = { 1 99 4 999 } ( size = 4, max_size = 4611686018427387903, capacity = 6, empty = 0 ) v1.pop_back() elem = { 1 99 4 } ( size = 3, max_size = 4611686018427387903, capacity = 6, empty = 0 ) v1.insert(v1.begin() + 1, 9999) elem = { 1 9999 99 4 } ( size = 4, max_size = 4611686018427387903, capacity = 6, empty = 0 ) v1.erase(v1.begin() + 2) elem = { 1 9999 4 } ( size = 3, max_size = 4611686018427387903, capacity = 6, empty = 0 ) v1.clear() elem = { } ( size = 0, max_size = 4611686018427387903, capacity = 6, empty = 1 ) v1.assign({ 4, 3, 2, 1 }) elem = { 4 3 2 1 } ( size = 4, max_size = 4611686018427387903, capacity = 6, empty = 0 ) v1.emplace_back(5) elem = { 5 } ( size = 1, max_size = 4611686018427387903, capacity = 1, empty = 0 ) v2.emplace(v2.begin(), 5) elem = { 5 } ( size = 1, max_size = 4611686018427387903, capacity = 1, empty = 0 ) v1.swap(v2) elem = { 1 2 3 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) elem = { 4 5 6 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) elem = { 4 5 6 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 ) elem = { 1 2 3 } ( size = 3, max_size = 4611686018427387903, capacity = 3, empty = 0 )