プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

C++のstd::vectorの要素をループ内で削除する

この記事は2019年07月19日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. C++のstd::vectorの要素をループ内で削除する
  3. おわりに

基礎からしっかり学ぶC++の教科書 C++14対応 マイクロソフト関連書

基礎からしっかり学ぶC++の教科書 C++14対応 マイクロソフト関連書

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているC++のstd::vectorの要素をループ内で削除する方法についてです。

目次へ

2. C++のstd::vectorの要素をループ内で削除する

C++のstd::vectorの要素をループ内で削除する方法ですが、イテレータを使用して先頭から削除した場合、削除した要素の次の要素が前に移動してしまいうまくいきません。
そのため以下のような方法で削除します。
erase関数は引数の要素を削除し、次の要素を返してくれます。

#include <vector>
#include <iostream>

int main()
{
    // テストデータを追加したvectorを用意します。
    std::vector<int> values;
    for (int i = 0; i < 3; ++i)
    {
        values.push_back((i + 1) * 10);
    }
    std::cout << values.size() << std::endl;

    // vectorをループ内で削除します。
    std::vector<int>::iterator itr = values.begin();
    while (itr != values.end())
    {
        // 該当の要素を削除し、次の要素を取得します。
        itr = values.erase(itr);
    }
    
    std::cout << values.size() << std::endl;
    return 0;
}

目次へ

3. おわりに

clear関数を使って全削除してもよいですが、newした要素を格納している場合、deleleしてから削除する必要があります。
その場合、上記のような方法で削除すればよいかと思います。

Effective Modern C++ ―C++11/14プログラムを進化させる42項目

Effective Modern C++ ―C++11/14プログラムを進化させる42項目

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ