/* * Copyright (c) 2018-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include #include void deref_vector_element_after_push_back_bad(std::vector& vec) { int* elt = &vec[1]; vec.push_back(42); std::cout << *elt << "\n"; } void deref_local_vector_element_after_push_back_bad() { std::vector vec = {0, 0}; int* elt = &vec[1]; vec.push_back(42); std::cout << *elt << "\n"; } void two_push_back_ok(std::vector& vec) { vec.push_back(32); vec.push_back(52); } void push_back_in_loop_ok(std::vector& vec, std::vector& vec_other) { for (const auto& i : vec_other) { vec.push_back(i); } } void reserve_then_push_back_ok(std::vector& vec) { vec.reserve(vec.size() + 1); int* elt = &vec[1]; vec.push_back(42); std::cout << *elt << "\n"; } void FN_reserve_too_small_bad() { std::vector vec; vec.reserve(1); vec.push_back(32); int* elt = &vec[0]; vec.push_back(52); std::cout << *elt << "\n"; } void reserve_then_push_back_loop_ok(std::vector& vec, std::vector& vec_other) { vec.reserve(vec.size() + vec_other.size()); int* elt = &vec[1]; for (const auto& i : vec_other) { vec.push_back(i); } std::cout << *elt << "\n"; } void FP_init_fill_then_push_back_loop_ok(std::vector& vec_other) { std::vector vec(vec_other.size()); int* elt = &vec[1]; for (const auto& i : vec_other) { vec.push_back(i); } std::cout << *elt << "\n"; } void reserve_bad(std::vector& vec) { int* elt = &vec[1]; vec.reserve(vec.size() + 1); std::cout << *elt << "\n"; }