恥ずかしながらC++のvectorのassign(n, val)
という関数を知らなかったのでメモです。
よく似た関数に、resize(n, val)
という関数があります。以下のコードで挙動を比較してみます。
#include <iostream> #include <vector> void print_vector(const std::vector<int> &vec) { for (auto e: vec) { std::cout << e << ", "; } std::cout << std::endl; } int main(){ std::vector<int> vec1{1, 2, 3}; vec1.resize(10, 777); print_vector(vec1); std::vector<int> vec2{1, 2, 3}; vec2.assign(10, 777); print_vector(vec2); return 0; }
結果は以下です。
1, 2, 3, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777, 777,
resize(n, val)
もassign(n, val)
も、vectorの長さをnに変える点では同じです。
違いは、resize(n, val)
ではvectorの延長された部分のみ値がval
になるのに対し、
assign(n, val)
ではvectorのすべての部分で値がval
になることです。
もしvectorオブジェクトのサイズが0の場合はresize(n, val)
もassign(n, val)
も結果は同じになりますが、
assign(n, val)
を使うほうがより意図を明確に表せます。
Wandboxへのリンクで実際に実行できます。