vector
で要素を1つずつ消去するにはどうすればよいですか?特定の要素が削除された後、いくつかの条件を使ってベクトルをチェックしたいと思います。ベクトルの要素を消去して他の要素の条件をチェックする方法
このように試しましたが、うまくいきません。どうしましたか?例えば、v = {1, -2 , 3, -2 ,5 }
についてv is already initialized
long long max = maxSubArraySum(v);
long long t = 0;
for(long long i = 0; i < n ; i++){
std::vector<long long> cv;
cv = v;
//cout << "i = " << i << "v = " <<v[i] << '\n';
cv.erase(find(cv.begin(),cv.end(),v[i])); // <—- wrong
// EDIT
// cv.erase(cv.begin()+i); <—- fix.
t = maxSubArraySum(cv);
//cout << "t = " << t << '\n';
if(t > max){
max = t;
//cout << max << '\n';
}
}
// cout << max << '\n';
}
}
、
- I次いで
maxSubArraySum
6 for this subarray {3,-2,5}
あるcv = {-2,3,-2,5 }
ためなり、最初1
取り除きます。私は-2
を除去 - 次に、その後
maxSubArraySum
私は3
を除去6 for this subarray {3,-2,5}
- 次にである
cv = {1, 3,-2,5}
ためなり、その後maxSubArraySum
私は-2
を除去-2 for this subarray {-2,5}
- 次にである
cv = {1, -2,-2,5}
ためなり、その後maxSubArraySum
はcv = {1, -2, 3, 5}
ためであろう8 for this subarray {3,5}
- 次に、
5
を削除すると、maxSubArraySum
は、cv = {1, -2,3,-2}
となります。4 for this subarray {1,-2,3}
C++
にはどのようにコードするのですか?
編集: 私は答えを得た。 最初の要素を削除していたので、コードが少しオフになりましたfind
が見つかりました。重複の場合、これはエラーを示しました。 そこで、インデックスを削除するように変更しました。 ありがとうございます。
@LogicStuffでは、 'cv'は' v'の一時コピーです。コピーを修正した後、それは破棄され、変更されていないオリジナルの「v」から再び作成されます。あなたは、なぜ 'v'から直接消去できないのかを正しく答えるために、より多くのコードを提供する必要があります。私はあなたに理由があると仮定し、あなたは彼らが何と言うのかを知っています。何?あなたは彼らの言うことを知らないのですか?まあまあ。 – user4581301
'vv 'を' cv'にコピーしないと、私はそれらを消去するときに要素を一つずつ失ってしまいます。インデックス '1'の要素を消去し、' maxSum'を見つけてから、最初の 'ベクトル'から再びインデックス '2'の要素を消去する必要があります。 –
私が言ったように、あなたは理由があると思います。私はそれが良いものだと思います。しかし、私は理由を知っていません**あなたが自分自身に見つかった問題からあなたを救う方法について良い提案をすることはできません。@ Shreevardhanの答えはあなたの投稿のコンテキストコード。より多くの文脈とより多くのコードなしでそれ以上の答えを得ることはできません。そのため、Segfaultが動作するべきことをする理由を知ることができます。 – user4581301