Posez votre question Signaler

Taille tableau c++

doudou - Dernière réponse le 26 oct. 2011 à 23:59
Bonjour,
je suis vraiment debutante dans la programmation et j'ai unenorme probleme.
je vous explique, je dispose d'un tableau dont je connais pas la taille tout ce que je peux faire c'est de l'initialiser au debut de la fonction apres la taille de ce tableau varie selon un certain parametre, a un certain moment je veux recuperer sa taille pour faire une boucle sur ce tableu et je ne dispose que d'un pointeur sur ce tableau.
j'ai trouvé que je peux utiliser la fonction length mais je ne sais pas trop comment l'utiliser.
sinon j'ai pensé a mettre une case en plus dans mon tableau pour indiquer la fin du tableu mais le probleme est comment remplir le tableau sans y toucher a la derniere case!!
qu'est ce que vous me conseillez et si possible comment faire aussi!!
merci bcp pour votre aide
Doudou
Lire la suite 

Taille tableau c++ »

9 réponses
Réponse
+4
moins plus
bonjour,
tu ferais mieux de laisser tomber les tableaux et d'utiliser les Vector qui sont nettement plus simple à utiliser dans ton cas, voici quelques exemples d'utilisation

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

using std::cout;

int main()
{
    // créer un tableau d'entiers vide
    std::vector<int> v;
    
    // ajouter l'entier 10 à la fin
    v.push_back( 10 );

    // afficher le premier élément (10)
    cout << v.front() << '\n';

    // afficher le dernier élément (10)
    cout << v.back() << '\n';

    // enlever le dernier élément
    v.pop_back(); // supprime '10'

    // le tableau est vide
    if ( v.empty() )
    {
        cout << "Tout est normal : tableau vide\n";
    }

    // redimensionner le tableau
    // resize() initialise tous les nouveaux entiers à 0
    v.resize( 10 );
    
    // quelle est sa nouvelle taille ?
    cout << v.size() << '\n'; // affiche 10

    // sa taille est de 10 : on peut accéder directement aux
    // 10 premiers éléments
    v[ 9 ] = 5;

    // intitialiser tous les éléments à 100
    std::fill( v.begin(), v.end(), 100 );

    // vider le tableau
    v.clear(); // size() == 0

    // on va insérer 50 éléments
    // réserver (allouer) de la place pour au moins 50 éléments
    v.reserve( 50 );

    // véridier que la taille n'a pas bougé (vide)
    cout << v.size() << '\n';

    // capacité du tableau = nombre d'éléments qu'il peut stocker
    // sans devoir réallouer (modifié grâce à reserve())
    cout << v.capacity() << '\n'; // au moins 50, sûrement plus

    for ( int i = 0; i < 50; ++i )
    {
        // grâce à reserve() on économise de multiples réallocations
        // du fait que le tableau grossit au fur et à mesure
        v.push_back( i );
    }

    // afficher la nouvelle taille
    cout << v.size() << '\n'; // affiche 50

    // rechercher l'élément le plus grand (doit être 49)
    cout << *std::max_element( v.begin(), v.end() ) << '\n';

    // tronquer le tableau à 5 éléments
    v.resize( 5 );

    // les trier par ordre croissant
    std::sort( v.begin(), v.end() );

    // parcourir le tableau
    for ( size_t i = 0, size = v.size(); i < size; ++i )
    {
        // attention : utilisation de l'opérateur []
        // les accès ne sont pas vérifiés, on peut déborder !
        cout << v[ i ] << '\t';        
    }
    cout << '\n';
fregux - 26 oct. 2011 à 13:17
ça peut toujours servir. d'ailleurs je me demandais si il y a un moyen de parcourir un tableau sans connaitre sa taille. une solution avec les iterators ou avec for each???
Merci des réponses
Char Snipeur - 26 oct. 2011 à 14:29
iterator = pas un tableau mais un vector
for each : pas C++ (ou alors la dernière version), éventuellement java.
fiddy - 26 oct. 2011 à 23:59
fregux,
Si tu as un tableau, tu en déduis la taille avec sizeof.
Par exemple :
int tab[]={....};
for(int i=0;i<sizeof tab/sizeof *tab;i++) {
   ...;
}
Ajouter un commentaire
Ce document intitulé « taille tableau c++ » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook