Notas de C++ Primer: unqiue, iterador de inserción, iterador de flujo, valor de retorno de inserción, eliminación y consulta del contenedor asociativo

Tabla de contenido

Uno. P343 único

2. iterador de inserción P358

3. Iterador iostream P359

4. P384 Detectar el valor de retorno de inserción (contenedor asociado)

5. P386 Borrar elemento (contenedor asociado)

Seis Operación de subíndice del mapa P387


Uno. P343 único

La función unqiue "eliminará" los duplicados de elementos adyacentes al contenedor.

vector<int> v = { 1, 2, 3, 3, 3, 4, 4, 5 };
unique(v.begin(), v.end());
for (auto n : v) cout << n << " ";
//结果:
1 2 3 4 5 4 4 5

Aquí hay algunos puntos a tener en cuenta:
1. Solo se eliminarán los duplicados de elementos adyacentes en el contenedor. Asegúrese de que los mismos elementos estén adyacentes antes de usarlos.

Si se almacena internamente así: 1, 2, 2, 3, 2, 4, 3, 5

Entonces el resultado será: 1, 2, 3, 2, 4, 3, 5, 5

2. El rango de parámetros está cerrado a la izquierda y abierto a la derecha, y el parámetro derecho es el último parámetro que participa en único.

3. El valor devuelto es la siguiente posición del último elemento que no se repite .

vector<int> v = { 1, 2, 3, 3, 3, 4, 4, 5 };
//unique之后:1 2 3 4 5 4 4 5
//返回:                ^

vector<int> v = { 1, 2, 2, 3, 2, 4, 3, 5 };
//unique之后:1 2 3 2 4 3 5 5
//返回:                  ^

2. iterador de inserción P358

Este es un adaptador de contenedor que toma un contenedor como argumento y devuelve un iterador.

Hay tres tipos:

tipo significado usar
volver_insertar(v)  Equivalente a v.push_back

auto i = back_inserter(v);

i = valor; // == v.push_back(valor);

insertador_frontal(v) Equivalente a v.push_front

auto i = insertador_frontal(v);

i = valor; // == v.push_front(valor);

insertar (v, p) Equivalente a v.insert, insertando elementos antes del iterador p

auto i = insertador(v, v.fin());

i = valor; // == v.insertar(v.fin(), val);

3. Iterador iostream P359

istream_iterador:

istream_iterator<int> it(cin), end;
vector<int> v(it, end);//将键盘数据写入数组

La operación iterador ++ se llama en el constructor de vectores Para el iterador istream, la operación ++ es sinónimo de in >> .

Los iteradores istream vacíos tienen como valor predeterminado los iteradores posteriores al final .

 ostream_iterador:

ostream_iterator<int> it(cout, " ");
vector<int> v = { 1, 2, 3, 4, 5, 6 };
for (auto n : v)
	(*it)++ = n;//将vector输出到显示器

 Hay dos construcciones para los iteradores ostream:

 ostream_iterator<T> fuera(os) out escribe datos de tipo T en el sistema operativo
ostream_iterator<T> fuera(os, d) out escribe datos de tipo T en el sistema operativo y genera una cadena d después de cada escritura

Para los iteradores ostream, la operación = es sinónimo de out << .

Además, se pueden omitir las operaciones de desreferenciación * y ++ .

ostream_iterator<int> it(cout, " ");
vector<int> v = { 1, 2, 3, 4, 5, 6 };
for (auto n : v)
	it = n;

4. P384 Detectar el valor de retorno de inserción (contenedor asociado)

La inserción de un contenedor asociativo que no se repite devolverá un objeto de tipo par, el primer miembro es un iterador de contenedor y el segundo miembro es de tipo bool.

La inserción es exitosa, primero es el elemento iterador y segundo es verdadero.

La inserción falló, el primero es el iterador del elemento existente, el segundo es falso.

5. P386 Borrar elemento (contenedor asociado)

El borrado de mapa tiene tres tipos de parámetros, y los valores de retorno también son diferentes.

forma valor devuelto
erase(val) //borra el elemento cuya palabra clave es val el número de elementos eliminados
erase(iterator) //Eliminar el elemento del iterador especificado siguiente iterador del iterador
erase(iterator_first, iterator_second) //Eliminar elementos dentro del rango del iterador especificado, rango: [primero, segundo) iterador_segundo

Seis Operación de subíndice del mapa P387

Para buscar en el mapa, debe elegir diferentes métodos según el escenario de uso.

método de búsqueda

mapa<K, V> m;

escena común
m[k] Encuentre k, espere agregar k cuando no haya.
m en (k) Encuentre k, espere lanzar una excepción cuando no haya (fuera_de_rango)
m.encontrar(k) Busque k. Si no hay k, no quiero cambiar el mapa y no quiero lanzar una excepción.


Por favor corrígeme si hay algún error.

Supongo que te gusta

Origin blog.csdn.net/weixin_61857742/article/details/128288203
Recomendado
Clasificación