Anexar Vector a Vector em C++

  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++

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::cout; using std::cin;
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::cout; using std::cin;
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::cout; using std::cin;
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::cout; using std::cin;
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;

Artigo relacionado - C++ Vector

  • Criar Vector de Vectores em C++
  • Acesso às Funções de Membro Desde o Apontador a um Vector em C++