Manter std :: listar iteradores válidos por inserção

Nota Esta não é uma pergunta se eu deveria "usar lista ou deque". É uma pergunta sobre a validade dos iteradores em face deinsert().

Essa pode ser uma pergunta simples e eu sou muito densa para ver o caminho certo para fazer isso. Estou implementando (para melhor ou para pior) um buffer de tráfego de rede como umstd::list<char> buf, e estou mantendo minha posição atual de leitura como iteradorreadpos.

Quando adiciono dados, faço algo como

buf.insert(buf.end(), newdata.begin(), newdata.end());

Minha pergunta é agora, como faço para manter oreadpos iterador válido? Se apontar para o meio da antigabuf, então tudo ficará bem (pelo iterador garante std :: list), mas normalmente eu posso ter lido e processado todos os dados e tenhoreadpos == buf.end(). Após a inserção, eu queroreadpos sempr para apontar para o próximo caractere não lido, que no caso da inserção deve ser o primeiro inserid

Alguma sugestão? (Curto de alterar o buffer parastd::deque<char>, que parece ser muito mais adequado à tarefa, conforme sugerido abaixo.)

Atualizar Em um teste rápido com o GCC4.4, observo que o deque e a lista se comportam de maneira diferente em relação areadpos = buf.end(): Depois de inserir no final, o readpos é quebrado em uma lista, mas aponta para o próximo elemento em um deque.Isso é uma garantia padrão?

(De acordo com cplusplus, qualquer deque :: insert () invalidado todos os iteradores. Isso não é bom. Talvez usar um contador seja melhor que um iterador para rastrear uma posição em um deque?)

questionAnswers(4)

yourAnswerToTheQuestion