std::vectorのresizeとassignの違い (C++)


このエントリーをはてなブックマークに追加

恥ずかしながらC++vectorassign(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へのリンクで実際に実行できます。

参考URL