💬

vectorのbackメソッドで最後の要素にアクセスできる

2023/11/25に公開1

結論

backメソッドでアクセスできる
ずっとbackメソッドを使わず、vectorのn-1番目を指定してアクセスしていたのでメモしておく

int main()
{

    std::vector<int> myVector = {1, 2, 3, 4, 8};

    // back()を使用して最後の要素にアクセス
    int lastElement = myVector.back();

    std::cout << lastElement << std::endl; // 8

    return 0;
}

https://cpprefjp.github.io/reference/vector/vector/back.html

残った疑問点

ドキュメントには計算量が定数時間とあるが、これはO(1)という認識であっているか?
O(N)ならTLEの原因になりそう。後ほど深掘りする

練習問題

https://atcoder.jp/contests/abc329/tasks/abc329_c

Discussion

齊藤敦志齊藤敦志

これはO(1)という認識であっているか?

その認識で正しいです。

std::vector の要素は連続した領域に割付けられることが保証され、配置は配列と互換性があります。 連続した領域なので複雑なデータ構造を辿る必要もありませんし、最後の要素の位置の計算は簡単にできるのです。

連続した位置に配置するというのは単純で便利な反面、連続した領域 (メモリ) を確保しなければならないという制限に縛られているので大きさを伸長するときに連続した場所を確保できなければ別の場所に配置しなおす場合があります。 再配置のコストは大きいので頻繁に再配置が起こるような使い方をすると実行時間が膨れ上がることにつながるので注意を要します。