Contenedor de vectores en C++ STL
-
Utilice
std::vector
para construir un array dinámica en C++ -
Utilice
std::vector
para almacenar objetosstruct
en C++ -
Utilice la función
std::vector::swap
para intercambiar elementos vectoriales en C++
Este artículo presentará varios métodos sobre cómo utilizar un contenedor vector
en C++.
Utilice std::vector
para construir un array dinámica en C++
std::vector
es parte de la biblioteca de contenedores e implementa un array redimensionable dinámicamente que almacena elementos en un almacenamiento contiguo. Los elementos vector
generalmente se agregan al final con las funciones integradas push_back
o emplace_back
. El contenedor vector
se puede construir fácilmente con la lista de inicializadores como se muestra en el siguiente código de ejemplo: objeto arr
. Además, se pueden almacenar valores estáticos de la lista de inicializadores en la expresión macro y expresar de manera concisa la operación de inicialización cuando sea necesario.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
#define INIT \
{ "Neque", "porro", "quisquam", "est", "qui", "dolorem", "ipsum", "quia" }
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<string> arr = {"Neque", "porro", "quisquam", "est",
"qui", "dolorem", "ipsum", "quia"};
printVector(arr);
cout << endl;
vector<string> arr2 = INIT;
printVector(arr2);
cout << endl;
return EXIT_SUCCESS;
}
Utilice std::vector
para almacenar objetos struct
en C++
std::vector
se puede utilizar para almacenar estructuras definidas de forma personalizada e inicializarlas con la notación de lista entre corchetes similar al ejemplo anterior. Tenga en cuenta que, al agregar un nuevo elemento struct
usando la función push_back
, el valor debe pasarse como una lista entre llaves, y si hay varias estructuras anidadas dentro de una struct
, se debe usar la notación correspondiente.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
struct cpu {
string wine;
string country;
int year;
} typedef cpu;
int main() {
vector<cpu> arr3 = {{"Chardonnay", "France", 2018}, {"Merlot", "USA", 2010}};
for (const auto &item : arr3) {
cout << item.wine << " - " << item.country << " - " << item.year << endl;
}
arr3.push_back({"Cabernet", "France", 2015});
for (const auto &item : arr3) {
cout << item.wine << " - " << item.country << " - " << item.year << endl;
}
return EXIT_SUCCESS;
}
Utilice la función std::vector::swap
para intercambiar elementos vectoriales en C++
std::vector
proporciona múltiples funciones integradas para operar en sus elementos, una de las cuales es swap
. Se puede llamar desde el objeto vector
y tomar otro vector
como argumento para intercambiar su contenido. Otra función útil es size
, que recupera el recuento de elementos actual en el objeto vector
dado. Sin embargo, tenga en cuenta que existe una función similar llamada capacity
que devuelve el número de elementos almacenados en el búfer asignado actualmente. A este último a veces se le asigna un tamaño mayor para evitar llamadas no esenciales a los servicios del sistema operativo. El siguiente código de ejemplo demuestra el escenario en el que las dos funciones devuelven valores diferentes.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
template <typename T>
void printVector(vector<T> &vec) {
for (const auto &item : vec) {
cout << item << ", ";
}
cout << endl;
}
int main() {
vector<int> arr4 = {1, 12, 45, 134, 424};
vector<int> arr5 = {41, 32, 15, 14, 99};
printVector(arr4);
arr4.swap(arr5);
printVector(arr4);
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
for (int i = 0; i < 10000; ++i) {
arr4.push_back(i * 5);
}
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
arr4.shrink_to_fit();
cout << "arr4 capacity: " << arr4.capacity() << " size: " << arr4.size()
<< endl;
return EXIT_SUCCESS;
}
Producción :
1, 12, 45, 134, 424,
41, 32, 15, 14, 99,
arr4 capacity: 5 size: 5
arr4 capacity: 10240 size: 10005
arr4 capacity: 10005 size: 10005
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook