この記事は2019年07月19日に投稿しました。
目次
基礎からしっかり学ぶC++の教科書 C++14対応 マイクロソフト関連書
- 作者: 矢吹太朗
- 出版社/メーカー: 日経BP
- 発売日: 2017/08/01
- メディア: Kindle版
- この商品を含むブログを見る
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項目
- 作者: Scott Meyers,千住治郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/09/18
- メディア: 大型本
- この商品を含むブログ (7件) を見る
紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。
私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリやウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。
また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688