Iterando uma DST definida em C ++

Iterando uma DST definida em C ++
A seguir, é apresentado um conjunto de nomes de frutas: "maracujá", "banana", "melancia", "blackberry", "uva"

Em C ++, um conjunto digitado como este, é um conjunto literal ou literal. É também o inicializer_list. Em C ++, um iterador é uma classe. Embora seja uma classe, seu objeto se comporta como um ponteiro. Quando é incrementado, aponta para o próximo elemento. Quando está diminuído, aponta para o elemento anterior. Assim como o ponteiro pode ser desreferenciado pelo operador indiretivo, o iterador também pode ser desreferenciado da mesma maneira. Existem diferentes tipos de iteradores para o conjunto em C++. Este artigo explica os diferentes iteradores para o conjunto e como usá -los.

Um programa para codificar o conjunto acima, ou qualquer conjunto, deve começar com o seguinte:

#incluir
#incluir
#incluir
usando namespace std;

A primeira linha inclui a biblioteca iostream. Isso é necessário para o terminal (console). A segunda linha inclui a biblioteca definida. Isso é necessário para o conjunto de programação. A terceira linha inclui a biblioteca de cordas. Para usar strings, a classe String deve ser incluída; Caso contrário, são os ponteiros para as cordas que serão classificadas e não os próprios literais alfabéticos de cordas. Estes são todos sub-bibliotecas da biblioteca padrão principal, em c++. DST no título deste artigo significa padrão. A quarta linha não é uma diretiva. É uma declaração. Ele insiste que qualquer nome usado no programa que não seja precedido pelo espaço para nome de usuário é do espaço de nome padrão.

A classe Iterator não precisa ser incluída. Já está na classe set.

Nota: Depois que os valores foram inseridos no conjunto, eles são classificados internamente em ordem crescente com configurações padrão.

Iterador

Este objeto de classe iterator é retornado pelas funções de membro Begin () ou End (). A função Begin () Membro retorna um iterador que aponta para o primeiro elemento do conjunto. A função final () do membro retorna um iterador que aponta logo após o último elemento do conjunto.

Este iterador funciona com o == ou != operador, mas não funciona com os = operadores. Embora esse iterador não seja oficialmente constante, o valor que aponta pode não ser alterado. O código a seguir mostra como usar este iterador:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

definir st ("maracujá", "banana", "melancia", "BlackBerry", "uva");
para (definido:: iterator iter = st.começar(); iter != st.fim(); iter ++)
cout << *iter << ", ";
cout << endl;
retornar 0;

A saída é:

banana, amora, uva, maracujá, melancia,

Para alterar (modificar) o valor de um conjunto, a função de apagamento do conjunto deve ser usada para apagar o elemento. Depois disso, um novo valor pode ser inserido. Após a inserção, haverá classificação interna, e o valor pode não se encaixar exatamente onde o valor antigo era. Modificar ou alterar o valor (ou elemento) de um conjunto, é discussão, para algum outro momento - veja mais tarde.

reverse_iterator

Este é o oposto do iterador acima. Este objeto de classe reverse_iterator é retornado pelas funções de membro rBegin () ou rend () da classe Set. A função de membro rBegin () retorna um iterador que aponta para o último elemento do conjunto. A função de membro rend () retorna um iterador que aponta pouco antes do primeiro elemento do conjunto.

Este reverse_iterator trabalha com o == ou != operador, mas não funciona com os = operadores. Embora esse iterador não seja oficialmente constante, o valor que aponta pode não ser alterado. O código a seguir mostra como usar este iterador:

definir st ("maracujá", "banana", "melancia", "BlackBerry", "uva");
para (definido:: reverse_iterator iter = st.rBegin (); iter != st.rend (); iter ++)
cout << *iter << ", ";
cout << endl;

A saída é:

Melancia, maracujá, uva, amora, banana,
classificado em ordem invertida.

const_iterator

Este objeto de classe const_iterator é retornado pelas funções de membro cbegin () ou cend (). A função de membro rBegin () retorna um const_iterator que aponta para o primeiro elemento do conjunto. A função de membro rend () retorna um const_iterator que aponta logo após o último elemento do conjunto.

Este const_iterator trabalha com o == ou != operador, mas não funciona com os = operadores. Este iterador é oficialmente constante e o valor que aponta para não pode ser alterado. O código a seguir mostra como usar este iterador:

definir st ("maracujá", "banana", "melancia", "BlackBerry", "uva");
para (definido:: const_iterator iter = st.CBEGIN (); iter != st.cend (); iter ++)
cout << *iter << ", ";
cout << endl;

A saída é:

banana, amora, uva, maracujá, melancia,

const_Reverse_iterator

Este é o oposto do iterador acima. Este objeto de classe const_Reverse_iterator é retornado pelas funções de membro da CrBegin () ou Crend () da classe Set. A função de membro do CRBEGIN () retorna um iterador que aponta para o último elemento do conjunto. A função de membro Crend () retorna um iterador que aponta pouco antes do primeiro elemento do conjunto.

Este const_reverse_iterator trabalha com o == ou != operador, mas não funciona com os = operadores. Este iterador é oficialmente constante e o valor que aponta para não pode ser alterado. O código a seguir mostra como usar este iterador:

definir st ("maracujá", "banana", "melancia", "BlackBerry", "uva");
para (definido:: const_reverse_iterator iter = st.crBegin (); iter != st.crend ​​(); iter ++)
cout << *iter << ", ";
cout << endl;

A saída é

Melancia, maracujá, uva, amora, banana,
classificado em ordem invertida.

const_iterator CBEGIN () e CEND ()

cbegin () retorna um iterador constante incondicional ao primeiro elemento do conjunto. Cend () retorna um iterador constante incondicional que é logo após o último elemento do conjunto. O código a seguir mostra como usá -lo:

definir st ("maracujá", "banana", "melancia", "BlackBerry", "uva");
para (definido:: const_iterator iter = st.CBEGIN (); iter != st.cend (); iter ++)
cout << *iter << ", ";
cout << endl;

A saída é:

banana, amora, uva, maracujá, melancia,
const_Reverse_iterator CRBEGIN () e CREND ()

Este é o oposto do acima. O código a seguir mostra como usá -lo:

definir st ("maracujá", "banana", "melancia", "BlackBerry", "uva");
para (definido:: const_reverse_iterator iter = st.crBegin (); iter != st.crend ​​(); iter ++)
cout << *iter << ", ";
cout << endl;

A saída é:

Melancia, maracujá, uva, amora, banana,

Conclusão

Todos os iteradores retornados pelas funções de membro do objeto Set funcionam com o == ou != operador, mas não trabalhe com os = operadores. Todos eles podem ser incrementados ou decrescidos. Todos os iteradores retornados pelas funções de membro do conjunto são direta ou indiretamente constante. Isso significa que os valores que apontam não podem ser alterados usando o iterador.

Para alterar (modificar) o valor de um conjunto, a função de apagamento do conjunto deve ser usada para apagar o elemento. Depois disso, um novo valor pode ser inserido. Após a inserção, haverá classificação interna, e o valor pode não se encaixar exatamente onde o valor antigo era. Modificar ou alterar o valor (ou elemento) de um conjunto é a discussão para algum outro momento - veja mais tarde.