IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

vector<vector<char> > Matrice;


Sujet :

SL & STL C++

  1. #21
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    comme ça?

    char* recv_buffer[100];
    MPI_Recv(&recv_buffer,100,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_WOMM_WORLD,&status)

    et pour le send:
    char* send_buffer[100];
    send_buffer[0]="chaine";
    send_buffer[1]="chaine2";

    MPI_Send(&send_buffer,100,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_WOMM_WORLD)
    c'est comme ça?

  2. #22
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    En gros (ton code est faux)
    Ce qui est important et que tu envoie une zone mémoire contigüe. après à toi de gérer comment manipuler cette zone mémoire.
    Pour ton cas tu peut imaginé de mettre toute tes string les unes à la suite des l'autres, séparées par le caractère nul '\0' avec un double \0\0 à la fin du buffer (pas obligatoire mais peut être utile).
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //trois string
    std::string leopard("salut");
    std::string leopard2("toto");
    std::string leopard3("tata");
    //buffer avec une mémoire contigüe
    std::vector<char> buffer;
     
    //copie de la première string
    std::copy(leopard.begin(),leopard.end(), std::back_inserter(buffer));
    //on ajoute le caratère null à la fin
    buffer.push_back('\0');
     
    //même chose pour la string 2
    std::copy(leopard2.begin(),leopard2.end(), std::back_inserter(buffer));
    buffer.push_back('\0');
     
    //même chose pour la string 3
    std::copy(leopard3.begin(),leopard3.end(), std::back_inserter(buffer));
    buffer.push_back('\0');
    //On ajoute un deuxième caractère null car fin du buffer
    buffer.push_back('\0');
    Maintenant tu envoie ton buffer et tu récupère tes string de l'autre côté.

    dsl parrain mais ca faisait longtemp que je voulais piqué tes string leopard

  3. #23
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    si je met
    std::copy(leopard.begin(),leopard.end(), std::back_inserter(buffer));
    alors erreur:
    error C2039: 'back_inserter' : is not a member of 'std'
    sinon si je supprime std::
    il me renvoi:
    error C2065: 'back_inserter' : undeclared identifier


    je crois que ça doit etre:

    using namespace::std;

    copy(leopard.begin(),leopard.end(), buffer.begin());


    j'ai fait ça aussi:
    MPI_Send(&buffer, buffer.size(), MPI_CHAR , 0,1, MPI_COMM_WORLD);

    et pour la réception:

    MPI_Recv(&c, 7, MPI_CHAR , MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD,&status);
    mais ça marche pas

  4. #24
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Il te manque des include
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <iterator>
    #include <algorithm>

    As tu compris mon code??

  5. #25
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    oui je l'ai compris,
    juste la récupération:
    je fait
    MPI_Recv(&c, c.size(), MPI_CHAR , MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD,&status);

    ok puis,

    comment faire pour la récupération
    désolé si j'ai pas bien compris

  6. #26
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    oui je l'ai compris,
    apparemment non... Sinon tu n'aurais pas écrit ce code ...

    As tu compris comment envoyer ton buffer?
    Qu'es ce que c ??
    A quoi va ressembler le buffer que tu va récupérer?


    ton problème est que les méthodes de MPI utilise du typage C et non C++.
    Il faudrait vraiment que tu comprenne la différences. Si tu mélange ces deux langages tu va pas y arriver....
    A la limite faire tout en C pour commencer te sera peut être plus simple.

  7. #27
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    c est le buffer de récupération.
    vector<char> c(17);
    MPI_Recv(&c, 17, MPI_CHAR , MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD,&status);

    il me renvoi pas d'erreurs.
    mais il me manque la récupération des chaines.
    est ce que je doit faire:
    for(int i=0;i<c.size();i++)
    string s=s+c[i].c_str();
    ???

  8. #28
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Ton code est faux.
    MPI_Recv va écrire sur une mémoire dont la taille est au moins de 17.
    Ici ce n'est pas ce que tu donne. Si tu veut donné la mémoire du vector tu fait &c[0] <=> pointeur du premier élément du vector.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    vector<char> c(17);	
    MPI_Recv(&c[0], 17, MPI_CHAR , MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD,&status);
    Citation Envoyé par fatjoe Voir le message
    mais il me manque la récupération des chaines.
    Je ne veut pas faire ton code.
    Dans mon exemple, le buffer va être :
    salut\0toto\0tata\0\0
    \0 est le caractère null qui correspond a la fin d'une string de type C

  9. #29
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    non je vous demande pas de faire mon code
    et je suis vraiment désolé pour le dérangement.
    un grand merci pour vous

    je veux juste savoir si
    après faire :

    vector<char> c(17);
    MPI_Recv(&c[0], 17, MPI_CHAR , MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD,&status);

    Je veux juste savoir comment récupéré la chaine
    Pas comment la découpé, je sais comment la découpé.
    je vous remercie

  10. #30
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    Pas comment la découpé, je sais comment la découpé.
    je vous remercie
    Comprend tu à quoi sert un vector???
    AS tu compris ce que tu va recevoir dans ton buffer????

    Si au lieu d'un vector tu utilise un tableau en C. Tu ferais quoi aprés??
    char tabC[17];
    MPI_Recv(tabC, 17, MPI_CHAR , MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD,&status);

  11. #31
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    je m'aitrise vraiment pas les chaines de caractères
    mais j'ai compris que dans chaque case de vector il ya un seul caractère
    si oui alors pourquoi

    cout<<c[0]<<endl;
    me renvoi @ dans le résultat

    et j'ai fait ça aussi:
    vector<char>::iterator startIterator;
    vector<char>::iterator tempIterator;

    for( tempIterator = c.begin(); tempIterator != c.end(); tempIterator++ )
    cout << *tempIterator;

    mais me renvoi le caractère @

  12. #32
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    je m'aitrise vraiment pas les chaines de caractères
    mais j'ai compris que dans chaque case de vector il ya un seul caractère
    c'est bien ca. En gros, un vector est une interface C++ d'un tableau de type C.

    Citation Envoyé par fatjoe Voir le message
    si oui alors pourquoi
    cout<<c[0]<<endl;
    me renvoi @ dans le résultat
    c[0] est un caractère.

    Une string en C est un tableau de caractère terminé par un caractère null
    Si tu fait
    tu affichera ta première string
    Si tu fait
    leopard aura pour valeur ta première string


    PS: je parle dans le cas ou c est un vector

  13. #33
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    je l'ai fait

    cout<<&c[0]<<endl;
    mais le même résultat
    aussi pour :
    string s=&c[0];
    cout<<s.c_str()<<endl;
    la meme chose

  14. #34
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par fatjoe Voir le message
    je l'ai fait

    cout<<&c[0]<<endl;
    mais le même résultat
    Tu es sur de ton envoie?
    ???
    Peut tu faire un code simple(quelque ligne de code) qui envoie et reçois un vector de string.
    Je regarderais demain.

  15. #35
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    #include <stdio.h>
    #include <mpi.h>
    #include <iostream>
    #include<vector>
    #include <iterator>
    #include <algorithm>
    using namespace::std;
     
    int main( int argc, char* argv[])
    {vector<char> c(17);	
    MPI_Status status;
    // Initialisation 
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD, &p);
    MPI_Comm_rank(MPI_COMM_WORLD,&rang);
    if ( rang == 0) {
     
    MPI_Recv(&c[0], 17, MPI_CHAR , MPI_ANY_SOURCE,MPI_ANY_TAG, MPI_COMM_WORLD,&status);			
     
     string s=&c[0];
    cout<<s.c_str()<<endl;
    }
    else if(rang==1)
    {
    string leopard("salut");
    string leopard2("toto");
    string leopard3("tata");
     
    vector<char> buffer;
    std::copy(leopard.begin(),leopard.end(), std::back_inserter(buffer));
     
    buffer.push_back('\0');
    std::copy(leopard2.begin(),leopard2.end(), std::back_inserter(buffer));
    buffer.push_back('\0');
     
    std::copy(leopard3.begin(),leopard3.end(), std::back_inserter(buffer));
    buffer.push_back('\0');
    buffer.push_back('\0');
     
    MPI_Send(&buffer, buffer.size(), MPI_CHAR , 0,1, MPI_COMM_WORLD);
    }
     
    }

  16. #36
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MPI_Send(&buffer, buffer.size(), MPI_CHAR , 0,1, MPI_COMM_WORLD);
    Essaie de comprendre les réponses que l'on te donne...
    Sur tous tes threads j'ai dû te le dire au moins 4-5 fois......
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MPI_Send(&buffer[0], buffer.size(), MPI_CHAR , 0,1, MPI_COMM_WORLD);

    T'as de très grosse lacune en C et en C++; Il te faut vraiment reprendre des bases. Tu va dans le
    C'est pour toi que je dit ça

    Si lors d'une réponse tu ne comprend pas certain passage, ne dit pas que tu as compris ou que tu sait. Demande des explications...

    Bonne soirée.

  17. #37
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    je suis vraiment désolé
    j'ai pas fait attention
    à l'adresse de début, je suis trop fatigué, il est tard

    je suis vraiment désolé pour le dérangement
    merci beaucoup pour votre grande aide
    pour la maitrise du C++, c'est vrai je suis pas bon
    car les bases sont mauvais
    mais je suis obligé de travaillé avec c++
    franchement je l'aime pas


    merci 1000 fois

  18. #38
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    [QUOTE=fatjoe;3214680)merci beaucoup pour votre grande aide
    pour la maitrise du C++, c'est vrai je suis pas bon
    car les bases sont mauvais
    [/QUOTE]

    Profite du forum et des ressources du site. Y as vraiment énormément de chose pour aider.
    @+

  19. #39
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 95
    Par défaut
    je sais que &v c'est l'adresse du vecteur, c'est pas moi qui a dit "c'est pas une adresse"
    Oui c'est moi qui l'ai dit, et a la suite il y avait : "... l'adresse d'une chaine de caracteres" !
    puis pour la taille je la confond pas
    12 posts plus loin tu ne semble toujours pas te rendre compte de ton erreur malheureusement.
    Reprends les posts depuis le debut, vraiment TOUT y est ! Ton code est tres simple et juste au niveau de la syntaxe MPI sauf que tu n'envoies pas les bonnes donnees

    PS : Ajoutes un MPI_Quit() a la fin de ton code pour tous les processus sinon les thread vont rester en suspends sur les differents processeurs

  20. #40
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    en tout cas un grand merci pour vous tous.
    pour le MPI_Quit() ça n'existe pas, je connais MPI_Finalize()

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/05/2007, 01h20
  2. Réponses: 8
    Dernier message: 22/12/2006, 23h36
  3. vector de vector
    Par Clark dans le forum SL & STL
    Réponses: 15
    Dernier message: 07/04/2006, 21h11
  4. [ Vector Fichier ] Vector dans fichier texte
    Par geegee dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2004, 14h56
  5. [Vector] classe Vector et exception
    Par Nanoua dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/04/2004, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo