Descripción detallada de los vectores
Un vector es una colección de objetos del mismo tipo, cada objeto tiene un valor de índice entero correspondiente.
Al igual que con los objetos de cadena, la biblioteca estándar manejará la memoria asociada con el almacenamiento del elemento. Llamamos contenedor a un vector porque puede contener otros objetos, puede contener matrices dinámicas de cualquier tipo y puede agregar y comprimir datos. Todos los objetos del contenedor deben ser del mismo tipo.
Vector es una plantilla de clase. Usando plantillas, puede escribir una definición de clase o función que pueda usarse para muchos tipos de datos diferentes. Por lo tanto, podemos definir un vector para contener objetos de cadena, o un vector para contener valores int, o un vector para contener objetos de un tipo de clase personalizado (como un objeto Sales_items). Cada tipo de vector especifica el tipo de elementos que contiene.
Para usar vector, debes incluir el siguiente código en el archivo de encabezado:
#include lt;vectorgt;
vector pertenece al espacio de nombres estándar, por lo que debe ser una calificación de nombre, el método específico es el siguiente:
Usar std::.vector;
vectorlt;intgt;vInts;
O concatenar ellos y use el nombre completo :
std: :vectorlt;intgt;vInts;
Si su código es pequeño y no está usando muchos espacios de nombres, se recomienda que use el método de espacio de nombres global: usando el espacio de nombres std;
Función
Expresión
c Asignar copias de n elementos a c.
Devuelve los datos señalados por el índice idx. Si idx está fuera de los límites, arroja out_of_range.
c.back()
Devuelve los últimos datos sin comprobar si los datos existen.
c.begin()
Devuelve la primera dirección de datos en el iterador.
c.capacity()
Devuelve la capacidad actualmente asignada del contenedor.
c.clear()
Elimina todos los datos del contenedor.
c.empty()
Determina si el contenedor está vacío.
c.end() // Apunta al siguiente elemento final en el iterador, apuntando a un elemento inexistente.
c.erase(pos)//Elimina los datos en la posición pos y devuelve la posición de los siguientes datos.
c.erase(begin, end)
Elimina los datos en el intervalo [beg, end] y devuelve la posición del siguiente dato.
c.front()
Devuelve los primeros datos.
get_allocator
Utiliza el constructor para devolver una copia.
c.insert(c.begin() pos, elem)//Inserta una copia de elem en la posición pos y devuelve la nueva ubicación de datos
c.insert(c.begin () pos, n, elem)//Inserta datos de n elementos en la posición pos, sin valor de retorno
c.insert(c.begin() pos, start, end)//En la posición pos Inserta el datos en el intervalo [inicio, fin]. Sin valor de retorno
c.max_size()
Devuelve la cantidad máxima de datos en el contenedor.
c.pop_back()
Eliminar los últimos datos.
c.push_back(elem)
Agrega un dato al final.
c.rbegin()
Devuelve los primeros datos de la cola inversa.
c.rend()
Devuelve la siguiente posición de los últimos datos en la cola inversa.
c.resize(num)
Especifique la longitud de la cola.
c.reserve()
Reserve la capacidad adecuada.
c.size()
Devuelve la cantidad real de datos en el contenedor.
c1.swap(c2)//Intercambiar elementos c1 y c2
swap(c1, c2)//Misma operación que arriba.
vectorlt;Elemgt; //Crea un vector vacío
vectorlt;Elemgt; c1(c2)//Copia un vector
vector lt;Elemgt; (n)//Crea un vector que contiene n elementos de datos. Los datos se generan mediante la construcción predeterminada
vector lt; c(n, elem)//Crea un vector que contiene n elementos de elem.
Vector lt; Elemgt; c(begin, end)//Crea un vector con (beg; end) como intervalo
c.~ vector Elemgt; ; () / Eliminar todos los datos y liberar memoria
operador[]
Devuelve una referencia a la ubicación especificada en el contenedor.
Creación de vectores
Los contenedores de vectores proporcionan una variedad de métodos de creación. Los siguientes son algunos métodos comunes.
Crea un objeto vectorial vacío de tipo Widget:
vectorlt; vWidgets
Crea un vector que contiene 500 datos de tipo Widget:
vectorlt; Widgetgt.vWidgets(500);
Crea un vector que contiene 500 datos de tipo Widget, todos los datos se inicializan a 0:
Widgetgt; (0));
Crear una copia del Widget:
vectorlt; vWidgetsFromAnother(vWidgets);
Agregar datos al vector
p>El método predeterminado para agregar datos a un vector es push_back(). push_back(Widget(i));
}
Obtener datos en la posición especificada en el vector
Los datos en el vector se asignan dinámicamente, use push_back ( ) El rango de espacio asignado suele estar determinado por el archivo o alguna fuente de datos. Si desea saber si un vector está vacío, puede usar vacío(), que devuelve verdadero si está vacío y falso en caso contrario. Por ejemplo, si desea obtener el tamaño del vector v pero no sabe si está vacío o si ya contiene datos, y si está vacío desea establecerlo en -1, puede usar el siguiente código para lograrlo. : p>
int nSize = v.empty() ?-1: static_castlt; intgt; (v.size());
Accede a los datos en el vector
Utilice dos métodos para acceder al vector.
1. vector::at()
2. vector::operator[]
operator[] es principalmente para compatibilidad con el lenguaje C. Puede manipularse como una matriz C. Pero at() es nuestra primera opción porque at() realiza una verificación de límites y genera una excepción si el acceso excede el alcance del vector. Dado que el operador [] es propenso a errores, rara vez lo usamos.
Eliminar datos en vector
Vector puede agregar datos muy fácilmente y también puede eliminar datos muy fácilmente. Vector también proporciona erase(), pop_back(), clear() para eliminar datos. .
Si desea utilizar el algoritmo remove(), debe incluir el siguiente código en el archivo de encabezado:
#include lt;algorithmgt;
remove tiene tres parámetros:
1. Iterator_First: el puntero de iteración que apunta al primer dato.
2. iterador _Last: puntero del iterador que apunta al último dato.
3. ㄊ_Pred: una función condicional que puede operar en iteración.
Función condicional
Una función condicional es una función que devuelve un resultado de sí o no según las condiciones definidas por el usuario. Es el puntero de función más básico, o un objeto de función. Este objeto de función debe admitir todas las operaciones de llamada a funciones y operaciones de sobrecarga del operador()(). eliminar hereda de unary_function, lo que permite pasar datos como condición.
Por ejemplo, supongamos que desea eliminar datos coincidentes de un vector lt;CSstringgt; si la cadena contiene un valor y comienza y termina con ese valor.
Primero, debe crear una estructura de datos que contenga los datos, similar al siguiente código:
#include lt; funcionalgt
enum findmodes {
FM_INVALID; = 0 ,
FM_IS,
FM_ STARTSWITH,
FM_ENDSWITH,
FM_CONTAINS
}; p>
typedef struct tagFindStr {
UINT iMode;
CString szMatchStr.
}FindStr;
typedef FindStr* LPFINDSTR ;
Luego procese el juicio de condición:
class FindMatchingString: public std:: unary_functionlt.CString, boolgt {
public:
FindMatchingString( const LPFINDSTR lpFS):
m_lpFS(lpFS) {
}
operador bool()( CStringamp; szStringToCompare) const {
bool retVal = false;
cambiar (m_lpFS-gt; iMode) {
caso FM_IS: {
retVal = ( szStringToCompare == m_lpFDD- gt; szMatchStr );
romper;
}
caso FM_STARTSWITH: {
retVal = (szStringToCompare.left(m_ lpFDD- gt; szMatchStr .GetLength())
== m_lpFDD-gt;szWindowTitle);
romper;
}
case FM_ENDSWITH : {
retVal = ( szStringToCompare.Right(m_lpFDD-gt; szMatchStr.GetLength())