この関数は、ベクトル、リンクリスト、およびダブルリンクリストで動作します。関数は値をとり、コンテナ内の値を検索します。 vlaueがコンテナ内にある場合、関数はすでに存在する場所のすぐ隣に値を挿入します。したがって、val=2
の場合、{3,2,5}
は{3,2,2,5}
になります。しかし、値がコンテナに存在しない場合は、代わりにバックに追加されます。EXCイテレータのアクセスが悪い
イテレータを使用してこの関数を書きました。それはベクトルでうまく動作しますが、リストまたは二重リンクリストで実行しようとすると、if (*it==val)
のExc Bad Accessエラーが発生します。私は何が間違っているのか見ていない。
template <class Container, class T>
void insertNextTo(Container &x, const T &val){
typename Container::iterator it = x.begin();
while (it!=x.end() && *it!=val){
++it;
}
if (*it == val){
x.insert(it, val);
}
else{
x.push_back(val);
}
}
編集:みなさんありがとうございます! if
の声明を変更する提案は完全に機能しました!
'val'が見つからない場合、' if'条件はUBにつながる終了要素を導出します。 – Mahesh