jak w cout wyświetlić zawartość listy

2016-10-01 14:27
0

Witam mam problem z wyrzuceniem zawartości list w cout.

#include <iostream>
#include <list>
#include <cstdio>
int main()
{
    int how;
    std::cin >> how;
    std::list<char> word (how,200);
    char words;
    int test = {};
    while (std::cin >> words && test == how)
    {
        word.push_back(words);
        test++;
    }
//    for ( std::list<char>::iterator iter = word.begin() ; iter < word.end() ; iter++)
        std::cout << "*" << word.size();
    return 0; 

chciałem by pod koniec tego programy wyświetlił mi się napis który wpisałem w liste.

edytowany 1x, ostatnio: 87kelthuzad, 2016-10-01 14:33
Rozwala mnie to nazewnictwo. word jako linked lista znaków, words jako znak. - kq 2016-10-01 18:33
@kq a może to jest jakaś obfuskacja, zmyłka przeciwnika? - Phestek 2016-10-01 18:48
Jestem początkujący i jeśli takie nazwy są śmieszne to jak powinienem coś takiego nazywać? - 87kelthuzad 2016-10-01 19:15
Nazewnictwo nie jest prostą rzeczą, ale ogółem staraj się nazywać tak zmienne aby mówiły czytającemu z czym ma do czynienia. Jeden znak na pewno nie jest słowami. lista jako słowo niby ma sens, ale użycie pokazuje, że masz tu prędzej całe zdanie czy paragraf. - kq 2016-10-01 19:17

Pozostało 580 znaków

2016-10-01 15:00
2

Można tak:

for (int element : list) {
  std::cout << element << ' ';
}

albo np. tak:

std::copy(list.cbegin(), list.cend(), std::ostream_iterator<int>(std::cout, " "));

http://ideone.com/L2CZ0z


"(...) otherwise, the behavior is undefined".
Nie lepiej for(auto&amp; element : list)? auto jest fajne, a bez użycia referencji działasz na kopiach obiektów. - Phestek 2016-10-01 18:49
Nie, nie lepiej. Wręcz o wiele gorzej. - Endrju 2016-10-01 18:50

Pozostało 580 znaków

2016-10-01 15:04
0

Zakładając, że masz już listę z tymi znakami to wyświetlić można w ten sposób

for (std::list<char>::iterator iter = word.begin(); iter != word.end(); ++iter)
    cout << *iter;

Albo krócej

for (auto iter = word.begin(); iter != word.end(); ++iter)
    cout << *iter;

Albo jeszcze krócej

for (auto i : word)
    cout << i;

Zwróc uwagę, że jest

iter != word.end()

a nie

iter < word.end()

bo iterator listy nie jest iteratorem swobodnego dostępu (RandomAccessIterator), więc nie można używać operatora <.

Dalej, naucz się pisać ++iter a nie iter++, żeby nie tworzyć niepotrzebnej kopii.

Natomiast Twój kod tworzenia listy też nie zadziała, bo

std::list<char> word (how,200)

co to niby ma robić? Przecież potem używasz push_back(), więc lista powinna być na początku pusta.

while (std::cin >> words && test == how)

Co ten warunek test == how ma robić?

edytowany 1x, ostatnio: twonek, 2016-10-01 15:05

Pozostało 580 znaków

2016-10-01 15:11
0
#include <iostream>
#include <list>
#include <cstdio>

using namespace std;

void sposob1()
{
    int Count;
    cin >> Count;
    list<char> words;

    while(Count--)
    {
        char word;
        cin >> word;
        words.push_back(word);
    }
    for(auto &w : words)
     cout << w;

}
void sposob2()
{
    string s;
    cin >> s;
    list<char> words;
    for(auto &w : s)
     words.push_back(w);
    for(auto &w : words)
        cout << w;
}

int main()
{
    sposob1();
    sposob2();
    return 0;
}

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0