質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3468閲覧

C++でのerase、removeでのエラー

akerue

総合スコア7

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/01/27 11:18

編集2018/01/27 11:19

発生している問題・エラーメッセージ

構造体を用いたvector(vector<strGroup *> textGroupVec;)から 
特定の条件下でのerase-removeをかけようと書いていたのですが、
現在の記述だとincludeしている<algorithm>
invalid operands to binary expressionが発生してしまいます。

どうすればエラーを出さずにvectorから削除することができるでしょうか。
プログラミング初心者で知識が浅く至らない点があるかと思いますが、ご教授いただければ幸いです。

該当のソースコード

C++(openframeworks)

for( int j=0; j<textGroupVec.size(); j++ ){ strGroup *curGroup = textGroupVec.at(j); if(curGroup->strId == group->strId){ //textGroupVec.erase(std::remove(textGroupVec.begin(), textGroupVec.end(), textGroupVec.begin() + j), textGroupVec.end()); break; } }

試したこと

eraseのみの実行は可能ですが、処理がとても遅く使い物になりません。
(抜粋)
if(curGroup->strId == group->strId){
textGroupVec.erase(textGroupVec.begin() + j);
printf("erase: %d", curGroup->strId);
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

eraseのみの実行は可能ですが、処理がとても遅く使い物になりません。

vectorからの要素の削除は時間計算量:O(N)なので遅いっす(先頭に近いほど)。

投稿2018/01/27 12:46

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akerue

2018/01/27 13:02

ご指摘ありがとうございます。 別のコンテナの利用も考え再度取り組んでみます。
guest

0

ベストアンサー

std::removeの第3引数はconst T&なのでtextGroupVec.begin() + jだとイテレータを渡してしまっているように思うのですが・・・

https://cpprefjp.github.io/reference/algorithm/remove.html

投稿2018/01/27 11:46

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akerue

2018/01/27 12:34

eraseとstd::removeでは引数から違っていたんですね...勉強不足でした。 ご指摘ありがとうございます、再度挑戦してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問