// Erase the missing items
vector::size_type StandardNum = FDRFreq.at(0).fData.size();
vector::iterator iter = FDRFreq.be
Your problem is iterator invalidation after the call to std::erase
. The warning is triggered by an iterator debugging extensions in your standard library implementation. erase
returns an iterator to the new valid location after the erase element and you continue iterating from there. However, this is still very inefficient.
Use the Erase-Remove Idiom to remove data with a predicate from a vector
.
FDRFreq.erase(std::remove_if(
begin(FDRFreq), end(FDRFreq),
[&StandardNum](const AlignedFDRData& x) {
return fData.size() > StandardNum; }),
end(FDRFreq));