0
votes

Valeurs de vecteur (chaîne et int) Sommation C ++

J'ai déménagé à C ++ de Python et je voulais juste connaître le moyen de résumer les valeurs d'un objet vecteur (liste). Par exemple, en Python, je pourrais utiliser le code ci-dessous: xxx pré>

Cependant, je veux apprendre le moyen de le faire en C ++ p> xxx pré> Et celui-ci est pour la combinaison de chaînes. P>

Pourriez-vous vous fournir comment faire cela en C ++? p>

J'ai essayé le code ci-dessous dans C ++ pour tester, cependant-il Ne compile pas avec succès: P>

#include <iostream>
#include <vector>
using namespace std;


int main()
{
    
    // A random list/vector here:
    vector <double> v = {1, 2, 3, 4, 5};

    // Declaring the final string to gather all the vector values:
    int sum;

    // Iterating through the vector
    for (int i = 0; i < v.size(); i++) {
        sum += v[i];
    }
    
    cout << sum;

    return 0;
}


12 commentaires

Êtes-vous peut-être cherché std :: accumulez ?


Est-ce que cela fonctionne aussi avec des chaînes?


Si vous pouvez trouver quelque chose qui décrit ce que signifie accumuler / résumer des chaînes et fournir un foncteur approprié pour cela, alors sûr.


Pourquoi le code ne compile pas? Quelles erreurs obtenez-vous?


juste une erreur de débogueur régulière vs


Cela fonctionne également et est plus proche de Python pour (auto i: v) somme + = i;


N'est-ce pas un moyen en C ++ d'utiliser la somme à l'aide d'itérateurs? Cela ressemble à une sorte d'impossible en fait qu'il n'existe pas une telle chose


Qu'est-ce qu'une erreur "régulière vs débogueur"?


STD :: Accumuler utilise des itérateurs ou vous pouvez écrire votre propre boucle à l'aide d'itérateurs. Je ne sais pas où vous vous obtenez des idées. Peut-être que vous utilisez simplement «itérateur» d'une manière différente de la manière dont elle est utilisée en C ++.


"Il y avait des erreurs de construction. Voulez-vous continuer et courir la dernière construction réussie?"


Changer int somme; sur int Sum = 0; . C'est la seule erreur que je peux voir.


D'accord @john, merci beaucoup pour votre soutien, le testera-t-il


3 Réponses :


1
votes

Le programme a une erreur. Dans la boucle code> pour code>, vous essayez de comparer un entier à un non signé long long int code> qui est renvoyé par v.size () code> ( Utilisez le mode -wall code> dans les arguments du compilateur pour l'obtenir).

Utilisation de chaque syntaxe, une approche est définie comme suit: p> xxx pré>

Ceci imprimera: P>

Hello World


1 commentaires

Exactement homme, c'est ce que je cherchais, merci beaucoup!



1
votes

Si vous êtes intéressé par les algorithmes STL, vous pouvez y parvenir en utilisant std :: Accumulez : xxx

sortie: xxx


1 commentaires

exactement, profondément apprécié



2
votes

Votre code fonctionne bien, à l'exception du fait que vous n'avez pas initialisé la variable de somme.

Voici un code auto-explicatif discutant de ce que vous pouvez utiliser (basé sur les commentaires sur votre question): P>

#include <iostream>
#include <numeric>
#include <string>
#include <vector>

int main() {

    // For strings:

    std::string str;
    std::vector<std::string> v = {"Hello", "World!"};

    // Method 1: Using range-based for loop:
    for (auto &&i : v) {
        str += i;
        str += " ";
    }
    std::cout << str << std::endl;

    // Method 2: Using std::accumulate():
    str = std::accumulate(v.begin(), v.end(), std::string(), [](std::string a, std::string b) {
        return std::move(a) + b + " ";
    });
    std::cout << str << std::endl;

    // Method 3: The usual for-loop:
    str = "";
    for (size_t i = 0; i < v.size(); ++i) {
        str += v.at(i); // str += v[i];
        str += " ";
    }
    std::cout << str << std::endl;

    // Method 4: Using iterators:
    str = "";
    for (auto i = v.begin(); i < v.end(); ++i) { // for (auto i = std::begin(v); i < std::end(v); std::advance(i))
        str += *i;
        str += " ";
    }
    std::cout << str << std::endl;

    // For numbers:

    std::vector<int> v2  = {1, 2, 3, 4, 5};
    int sum = 0;

    // Method 1: Using range-based for loop:
    for (auto &&i : v2)
        sum += i;
    std::cout << sum << std::endl;

    // Method 2: Using std::accumulate():
    sum = std::accumulate(v2.begin(), v2.end(), 0);
    std::cout << sum << std::endl;

    // Method 3: The usual for-loop:
    sum = 0;
    for (size_t i = 0; i < v2.size(); ++i)
        sum += v2.at(i); // sum += v2[i]
    std::cout << sum << std::endl;

    // Method 4: Using iterators:
    sum = 0;
    for (auto i = v2.begin(); i < v2.end(); ++i) // for (auto i = std::begin(v2); i < std::end(v2); std::advance(i))
        sum += *i;
    std::cout << sum << std::endl;

    return 0;
}


0 commentaires