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 )
参考