2013-07-01 1 views
2

Dans ce code, j'essaie de déplacer l'itérateur de 10 éléments.std :: ostream {alias std :: basic_ostream <char>} Ivalue à 'std :: basic_ostream <char> &&

#include <iostream> 
    #include <string> 
    #include <vector> 
    int main() 
    { 
     using namespace std; 
     vector<int> v(20); 
     auto mid = v.begin() + 10; 
     cout<<mid; 


    } 

Lors de l'exécution de ce code, j'obtiens l'erreur mentionnée dans le titre. Je suis un débutant. Je rencontre cette erreur dans presque tous les programmes que j'écris. Où vais-je mal?

Répondre

3

Itérateur « points » à un élément, ce que vous voulez faire est la suivante:

cout << *mid; 

Vous devez « déréférencement » l'itérateur d'imprimer ce qu'il pointe. Essayer de l'imprimer directement vous donne l'erreur que vous avez mentionnée.

Edit: voici une petite démo:

#include <iostream> 
#include <vector> 

int main(int argc, char* argv[]) 
{ 
    std::vector<int> numbers; 
    numbers.push_back(4); 
    numbers.push_back(3); 
    numbers.push_back(2); 

    auto beg = numbers.begin(); 
    auto mid = numbers.begin() + 1; 
    std::cout << *beg << std::endl; 
    std::cout << (beg < mid) << std::endl;  // True because beg (index 0) points to an element earlier than mid (index 1) 
    std::cout << (*beg < *mid) << std::endl; // False because the element pointed-to by beg (4) is bigger than the one pointed-to by mid (3) 

    return 0; 
} 

Output La première ligne montre 4 qui est la valeur du premier élément! La deuxième ligne montre 1 (toutes les valeurs non nulles signifient vrai) et la dernière ligne montre 0 (zéro est la seule valeur qui signifie faux).

+0

D'accord, merci! Mais lors de l'utilisation dans une déclaration if, comme if (it Slay

+0

Aussi, ce programme ne devrait-il pas me donner une sortie de 11? Il me donne 0 – Slay

+0

Non, je crois que votre vecteur contient vingt 0. – Borgleader

Questions connexes