103 votes

Comment puis-je passer plusieurs entiers dans un vecteur en une seule fois ?

Actuellement, quand je dois utiliser vector.push_back() plusieurs fois.

Le code que j'utilise actuellement est

std::vector TestVector;
TestVector.push_back(2);
TestVector.push_back(5);
TestVector.push_back(8);
TestVector.push_back(11);
TestVector.push_back(14);

Y a-t-il un moyen d'utiliser vector.push_back() une seule fois et simplement passer plusieurs valeurs dans le vecteur ?

4voto

zxxc Points 327

Vous pouvez également utiliser Boost.Assignment :

const list primes = list_of(2)(3)(5)(7)(11);

vector v; 
v += 1,2,3,4,5,6,7,8,9;

2voto

Depuis c++17 vous pouvez utiliser la méthode suivante :

#include 
#include 

using namespace std;

vector vec;
template
void vecPush(const T& ... x) {
    (vec.push_back(x), ...);
}

int main() {
    vecPush(4, 10, 4);
    for(const auto& a : vec)
        cout << a << " ";
    return 0;
}

1voto

user1095108 Points 3249

De nos jours (c++17) c'est facile :

auto const pusher([](auto& v) noexcept
  {
    return [&](auto&& ...e)
      {
        (
          (
            v.push_back(std::forward(e))
          ),
          ...
        );
      };
  }
);

pusher(TestVector)(2, 5, 8, 11, 14);

EDIT: pour les vraiment aventureux (c++20) :

template 
constexpr void operator|(Tuple&& t, F f)
{
  [&](std::index_sequence) noexcept(noexcept((f(std::get(t)), ...)))
  {
    (f(std::get(t)), ...);
  }
  (std::make_index_sequence>>());
}

std::forward_as_tuple(2, 5, 8, 11, 14) | [&](auto&& e){ TestVector.push_back(std::forward(e)); }

-3voto

Probol Points 1

Oui vous le pouvez, dans votre cas :

vectorTestVector;`
for(int i=0;i<5;i++)
{

    TestVector.push_back(2+3*i);

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X