Comment puis-je passer une variable vectorielle à une fonction?

Comment pouvons-nous passer vector variables vector à une fonction? J’ai un vector de char* et une fonction qui prendra un char * comme argument. Comment puis-je passer la variable vector à cette fonction?

Si vous avez une fonction prenant un argument char *, vous ne pouvez transmettre qu’un seul des caractères char * du vecteur. Par exemple:

 std::vector v; char buf[] = "hello world"; v.push_back(buf); the_function(v[0]); 

Si vous voulez appeler la fonction sur chaque membre du vecteur, faites simplement une boucle:

 for (std::vector::iterator i = v.begin(); i != v.end(); ++i) the_function(*i); 

EDIT: en fonction de votre commentaire ci-dessous, vous voulez réellement écrire une fonction qui accepte le vecteur en tant qu’argument … try:

 void the_function(const std::vector& v) { // can access v in here, eg to print... std::cout << "[ (" << v.size() << ") "; for (std::vector::iterator i = v.begin(); i != v.end(); ++i) std::cout << *i << ' '; std::cout << " ]"; } 

Si vous souhaitez appeler une fonction existante et que vous ne souhaitez pas modifier sa liste d'arguments ...

 void TV_ttf_add_row(const char*, const char*, const void*); 

... alors, supposons que le vecteur contienne suffisamment d'éléments:

 assert(v.size() >= 3); // optional check... TV_ttf_add_row(v[0], v[1], v[2]); 

ou

 if (v.size() >= 3) TV_ttf_add_row(v[0], v[1], v[2]); 

ou, si vous voulez une exception levée s'il n'y a pas assez d'éléments dans v , alors ...

 try { TV_ttf_add_row(v.at(0), v.at(1), v.at(2)); } catch (const std::exception& e) { std::cerr << "caught exception: " << e.what() << '\n'; } 

(le bloc try / catch ne doit pas nécessairement entourer l'appel d'une seule fonction - aussi longtemps que les v.at( ) trouvent quelque part dans le bloc try ou dans une fonction appelée directement ou indirectement depuis l'intérieur du bloc).

Vous pouvez également accéder aux éléments vectoriels à l’aide de son index:

 void f(char* s) { // do something with s } std::vector char_vect; size_t len = char_vect.size(); for (size_t i=0; i 

Si vous devez passer le contenu d’un std :: vector à une fonction prenant un tableau C, vous pouvez utiliser l’adresse du premier élément du vecteur:

 void someCfunc(char *); std::vector somevec; // set up the vector ... then: someCfunc(&somevec[0]); 

CEPENDANT – faites attention à ne pas mélanger la convention de la corde en C ici! Un std::vector n’appenda pas automatiquement un '\0' à la fin de la chaîne; vous devez le faire manuellement. S’il ne s’agit que d’un tampon d’octets, vous devrez indiquer séparément la taille du vecteur. Et si vous recevez des données dans le vecteur, la fonction C ne peut pas développer le vecteur elle-même. Il vous appartient donc de vous assurer que le vecteur est suffisamment grand au préalable.

Notez également que cela ne s’applique qu’à std::vector et non à d’autres conteneurs STL.