Articles of iterador

Iterador de nome de tipo de modelo C ++

Considere o seguinte arquivo de header: template struct tNode { T Data; //the data contained within this node list<tNode*> SubNodes; //a list of tNodes pointers under this tNode tNode(const T& theData) //PRE: theData is initialized //POST: this->data == theData and this->SubNodes have an initial capacity // equal to INIT_CAPACITY, it is set to the head […]

Precisa de iterador ao usar loops baseados em ranged

Atualmente, só posso fazer loops baseados em intervalos com isso: for (auto& value : values) Mas às vezes eu preciso de um iterador para o valor, em vez de uma referência (por qualquer motivo). Existe algum método sem ter que percorrer todo o vetor comparando valores?

Como evitar a duplicação de código implementando iteradores const e non-const?

Estou implementando um contêiner personalizado com uma interface semelhante a STL. Eu tenho que fornecer um iterador regular e um constante iterador. A maior parte do código para as duas versões dos iteradores é idêntica. Como posso evitar essa duplicação? Por exemplo, minha class de contêiner é Foo e estou implementando FooIterator e FooConstIterator . […]

O redimensionamento de um vetor invalida os iteradores?

Eu achei que este código C ++: vector a; a.push_back(1); a.push_back(2); vector::iterator it = a.begin(); a.push_back(4); cout << *it; imprima algum grande número random; mas se você adicionar a.push_back(3) entre as linhas 3 e 4, ele irá imprimir 1. Você pode me explicar?

invalidação de iterador std :: vector

Houve algumas perguntas sobre esse assunto antes; meu entendimento é que chamar std::vector::erase só invalidará os iteradores que estão em uma posição após o elemento apagado. No entanto, após apagar um elemento, o iterador nessa posição ainda é válido (desde que, claro, não aponte para end() após o apagamento)? Meu entendimento de como um vetor […]

Verificando se um iterador é válido

Existe alguma maneira de verificar se um iterador (seja de um vetor, uma lista, um deque …) é (ainda) desreferenciável, ou seja, não foi invalidado? Eu tenho usado try – catch , mas existe uma maneira mais direta de fazer isso? Exemplo: (o que não funciona) list l; for (i = 1; i<10; i++) { […]

Alguns ajudam a entender o “rendimento”

Na minha eterna busca para sugar menos eu estou tentando entender a declaração de “rendimento“, mas eu continuo encontrando o mesmo erro. O corpo de [someMethod] não pode ser um bloco iterador porque ‘System.Collections.Generic.List ‘ não é um tipo de interface do iterador. Este é o código onde fiquei preso: foreach (XElement header in headersXml.Root.Elements()){ […]

Como posso implementar a interface iterável?

Dado o seguinte código, como posso iterar em um object do tipo ProfileCollection? public class ProfileCollection implements Iterable { private ArrayList m_Profiles; public Iterator iterator() { Iterator iprof = m_Profiles.iterator(); return iprof; } … public Profile GetActiveProfile() { return (Profile)m_Profiles.get(m_ActiveProfile); } } public static void main(String[] args) { m_PC = new ProfileCollection(“profiles.xml”); // properly outputs […]

Qual é a razão por trás do cbegin / cend?

Gostaria de saber por que o cbegin e o cbegin foram introduzidos no C ++ 11? Quais são os casos em que chamar esses methods faz diferença nas sobrecargas constantes de begin e end ?

Criando meus próprios Iteradores

Eu estou tentando aprender C ++ então me perdoe se esta questão demonstra uma falta de conhecimento básico, você vê, o fato é que eu tenho uma falta de conhecimento básico. Eu quero alguma ajuda para descobrir como criar um iterador para uma class que criei. Eu tenho uma class ‘Shape’, que tem um contêiner […]