Anexar Vector a Vector em C++

Jinku Hu 12 outubro 2023
  1. Utilizar a função insert para anexar Vector a Vector em C++
  2. Utilizar a função insert para adicionar elementos em Vector em C++
Anexar Vector a Vector em C++

Este artigo irá explicar vários métodos de como anexar um vector a outro vector em C++.

Utilizar a função insert para anexar Vector a Vector em C++

O método insert é uma função integrada do recipiente std::vector que pode adicionar múltiplos elementos aos objectos vector. Como primeiro exemplo, mostramos como anexar um determinado intervalo de um vector a outro. Se especificarmos três iteradores como argumentos, a função insert adicionará elementos do intervalo dos dois últimos argumentos antes de o iterador passar como o primeiro parâmetro. Uma vez que passamos o end do iterador do primeiro objecto vector no seguinte exemplo de código, a função está essencialmente a fazer a anexação de dois vectores.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};
  vector<int> i_vec2 = {121, 321, 431, 531, 231, 651, 841};

  cout << "i_vec1           : ";
  printVectorElements(i_vec1);
  i_vec1.insert(i_vec1.end(), i_vec2.begin(), i_vec2.end());
  cout << "i_vec1 (inserted): ";
  printVectorElements(i_vec1);
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

i_vec1           : 12; 32; 43; 53; 23; 65; 84;
i_vec1 (inserted): 12; 32; 43; 53; 23; 65; 84; 121; 321; 431; 531; 231; 651; 841;

Em alternativa, podemos especificar os iteradores utilizando métodos std::end/std::begin, implementando uma forma mais genérica de passar argumentos para a função insert:

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};
  vector<int> i_vec2 = {121, 321, 431, 531, 231, 651, 841};

  cout << "i_vec1           : ";
  printVectorElements(i_vec1);
  i_vec1.insert(std::end(i_vec1), std::begin(i_vec2), std::end(i_vec2));
  cout << "i_vec1 (inserted): ";
  printVectorElements(i_vec1);
  cout << endl;

  return EXIT_SUCCESS;
}

Utilizar a função insert para adicionar elementos em Vector em C++

Outra forma comum de utilizar o método insert é adicionar uma gama de elementos com um determinado valor ao vector. Por exemplo, podemos inserir zeros nas 4 primeiras posições do inteiro vector. Note-se que o primeiro argumento é a posição do elemento perante o qual os elementos são adicionados. O método insert pode ser utilizado mesmo que os elementos vector sejam atribuídos manualmente utilizando a chamada new;

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<int> i_vec1 = {12, 32, 43, 53, 23, 65, 84};

  cout << "i_vec1           : ";
  printVectorElements(i_vec1);
  i_vec1.insert(i_vec1.begin(), 4, 0);
  cout << "i_vec1 (inserted): ";
  printVectorElements(i_vec1);
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

i_vec1           : 12; 32; 43; 53; 23; 65; 84;
i_vec1 (inserted): 0; 0; 0; 0; 12; 32; 43; 53; 23; 65; 84;

O método insert também pode ser aplicado quando dois vectores de strings precisam de ser concatenados. O exemplo seguinte demonstra o caso dado com quase a mesma sintaxe que a utilizada com os vectores inteiros.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

template <typename T>
void printVectorElements(vector<T> &vec) {
  for (auto i = 0; i < vec.size(); ++i) {
    cout << vec.at(i) << "; ";
  }
  cout << endl;
}

int main() {
  vector<string> str_vec1 = {"doordash", "dribble", "renode", "xilinx"};
  vector<string> str_vec2 = {"airbus", "sikorsky"};

  str_vec1.insert(str_vec1.end(), str_vec2.begin(), str_vec2.end());
  printVectorElements(str_vec1);
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

doordash; dribble; renode; xilinx; airbus; sikorsky;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artigo relacionado - C++ Vector