Problemas con VC++ al recibir entradas del usuario
Vector es parte de la biblioteca de plantillas estándar de C++. Es una biblioteca de clases y funciones de plantilla multifuncional que puede operar varias estructuras de datos y algoritmos. Vector se considera un contenedor porque puede almacenar varios tipos de objetos como un contenedor. En resumen, un vector es una matriz dinámica que puede almacenar cualquier tipo y tiene la capacidad de agregar y comprimir datos.
Para utilizar vector, debes incluir el siguiente código en el archivo de encabezado:
#include
el vector pertenece al espacio de nombres estándar, por lo que debes aprobar Calificarlo nombrándolo y completar tu código de la siguiente manera:
usando std::vector;
Esta es la primera vez que usas vector. vector;
vector
O concatenarlos y usar el nombre completo:
std::vector
Se recomienda utilizar el método de espacio de nombres global:
Usar espacio de nombres std;<
Función
Expresión
c .
c.assign(begin,end)
Asigne los datos en el intervalo [beg; end) a c y asigne copias de n elementos a c.
c.at(idx)
Devuelve los datos a los que hace referencia el índice idx. Si idx está fuera de los límites, se arroja out_of_range.
c.begin()
Devuelve la primera dirección de datos en el iterador.
c.size()
Devuelve el número de datos en el 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 que no existe.
c.erase(pos)
c.erase(beg,end)
Elimina los datos en la posición pos y devuelve la siguiente posición de datos.
Elimina los datos dentro del 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(pos,elem)
c.insert(pos,n,elem)
c.insert(pos,begin,end)
Inserte una copia de elem en la posición pos y devuelva la nueva ubicación de datos. Inserte n elementos de datos en la posición pos. Sin valor de retorno. Inserte los datos en el intervalo [inicio, fin) en la posición pos. 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)
swap(c1,c2)
Intercambia los elementos en c1 y c2. El funcionamiento es el mismo que el anterior.
vector
cvector
vector
ector < Elem> c(n, elem)
vector
c.~ Copia un vector. Cree un vector que contenga n datos, todos generados a partir de la estructura predeterminada.
Crea un vector que contenga n copias de elem.
Crea un vector con intervalos [beg;end].
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:
vector
Crea un vector que contiene 500 datos de tipo Widget:
vector Crea un vector que contiene 500 datos de tipo Widget, todos los datos se inicializan a 0: vector Crea una copia del Widget: vector Agrega datos al vector El método predeterminado para agregar datos a un vector es push_back(). Por ejemplo, para agregar 10 datos al vector for(int i= 0;i<10; i++) { vWidgets.push_back(Widget(10))). push_back(Widget(i)); } Obtener los datos en la posición especificada en el vector Los datos en el vector se asignan dinámicamente, use push_back() Se realiza una serie de asignaciones que generalmente determinan el archivo o alguna fuente de datos. Si desea saber la cantidad de datos en un vector, puede usar vacío(). Para obtener el tamaño de un vector, puedes usar size(). 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. : int nSize = v.empty() ?-1 : static_cast Accede a los datos en el vector Utilice dos vectores de acceso a métodos. 1. vector::at() 2. vector::operator[] operator[] se utiliza principalmente para la compatibilidad con el lenguaje C. Puede manipularse como una matriz C. Pero at() es nuestra primera opción porque at() realiza la 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. Aquí hay una verificación: Analice el siguiente código: vector
} catch(constException& e) {
cout << what(). ;
cout << e.what();
}
Eliminar datos de vectores
Los vectores hacen que sea muy fácil agregarlos data, también puedes eliminar datos muy fácilmente. De manera similar, vector proporciona erase(), pop_back() y clear() para eliminar datos.
Algoritmo Remove_if() Si desea utilizar remove_if(), debe incluir el siguiente código en el archivo de encabezado:
#include
Remove_if() tiene tres parámetros:
1. iterator_First: puntero del iterador 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 de función y las operaciones de sobrecarga del operador()(). remove_if() se hereda a través de unary_function, lo que permite pasar datos como condición.
Por ejemplo, supongamos que desea eliminar datos coincidentes de un vector
Primero, debe crear una estructura de datos que contenga los datos, similar al siguiente código:
#include
enum findmodes {
FM_INVALID = 0,
FM_IS,
FM_ STARTSWITH,
FM_ENDSWITH,
FM_CONTAINS
};
typedef struct tagFindStr {
UINT iMode;
CString szMatchStr.
}FindStr;
typedef FindStr* LPFINDSTR;
p>Luego procese el juicio condicional:
class FindMatchingString: public std::unary_function<.CString, bool> {
public:
FindMatchingString(const LPFINDSTR lpFS):
m_lpFS(lpFS) {
}
operador bool()( CString& szStringToCompare) const {
bool retVal = false;
cambiar (m_lpFS->iMode) {
case FM_IS: {
retVal = ( szStringToCompare == m_lpFDD-> szMatchStr);
p>break;
}
case FM_STARTSWITH: {
retVal = (szStringToCompare.left(m_ lpFDD- >szMatchStr.GetLength())
== m_lpFDD->szWindowTitle);
romper;
}
case FM_ENDSWITH: {
retVal = ( szStringToCompare.Right(m_lpFDD->szMatchStr.GetLength())