Newsgroup: it.comp.lang.c++
Titolo: classe string

Buon anno a tutti.
Sullo Stroustrup 3. edizione, in un esempio a p. 115, viene riportata la
seguente
linea di codice
                while(cin.get(ch) && isalnum(ch))
string_value.push_back(ch);
dove ch e string_value sono definiti come:
char ch;
string string_value;
Quindi pensavo che lo standard prevedesse un metodo pus_back per la
classe string che prendesse un char e appendesse tale char in coda alla
stringa.
Pero` se compilo il seguente programma:
#include <string>
int main() {
    string s;
    s.push_back('x');
    return 0;
}
ottengo il seguente errore:
[mg@p2 prove]$ g++ -g -Wall b.cc -o b
b.cc: In function `int main()':
b.cc:5: no matching function for call to `string::push_back (char)'
quindi suppongo che lo standard non preveda alcun metodo push_back
per la classe string (ho provato anche a cercare negli header del
compilatore
e sembra che tale metodo non ci sia).
Qualcuno sa se esiste un metodo analogo per la classe string, cioe`  un
metodo che prende un char e lo inserisce in coda alla stringa ?
Grazie in anticipo,
Marco Guidi

 metodo che prende un char e lo inserisce in coda alla stringa ?
Il metodo append, fra i suoi vari overload, ne ha uno che ti serve:
    string lastringa;
    lastringa.append(1,'x');
questo appende 1 copia del carattere 'x'.
Alex

 quindi suppongo che lo standard non preveda alcun metodo push_back
Neanche il DJGPP lo compila. Eppure sulla documentazione della SGI tale
metodo è riportato. Come mai? Comunque dice anche che è equivalente a
string_value.insert(string_value.end(), ch);
quindi puoi usare quest'ultima forma.
EMG

 metodo è riportato. Come mai? Comunque dice anche che è equivalente a
La SGI implementa STL, che non e` la stessa cosa della libreria standard
C++.  Perche` "urbi et orbi" siano _erroneamente_ convinti che STL e`
parte della libreria standard C++, non lo so (forse perche` si assomigliano
al 90+%...?-).  Pensa che ho _appena_ fatto in tempo a segnalare a
Bruce Eckel che stava per commettere anche lui questo erroraccio sul
suo "Thinking in C++" 2a edizione -- anche lui non lo sapeva (ma ha
controllato coi suoi colleghi del comitato di standardizzazione, che gli
hanno confermato la differenza), eppure si tratta forse del miglior autore
di testi introduttivi a C++ oggi, e il suo libro e` sul suo sito da molti
mesi, appunto allo scopo di permettere correzioni di questo tipo (ma
forse, essendo un testo, sia pur ottimo, ma pur sempre da principianti,
gli esperti che avrebbero potuto cogliere e correggere dettagliuzzi del
genere sono stati pigri nel scaricarlo e controllarlo, cosi` come confesso
di esserlo stato io).
Questa sottile differenza fra STL e libreria standard C++ mordera`
l'intera comunita` dei programmatori C++ in molti modi in futuro, sigh.
Alex

 C++.
Certo! Uff, ma è possibile, una volta per tutte, sapere dove trovare un
reference ben fatto su tutta la libreria standard C++?
EMG

 wrote in message
386A0B36...@flashnet.it...

In linea, sul sito di Dinkumware (quello di Plauger) -- mi pare
(ma non sono sicuro) a 
www.dinkumware.com
.  Lo vendono
anche, ma costa, mentre l'accesso in linea e` gratis.
Se no, il sito ANSI, dove vendono lo standard ISO del C++
(comprende quello della libreria) a $18 come .PDF.
Alex

 La SGI implementa STL, che non e` la stessa cosa della libreria standard


Gli esperti parlano molto bene del libro "The C++ Standard Library : A
Tutorial and Reference", di N. Josuttis.
Ciao,
Nicola

 Tutorial and Reference", di N. Josuttis.
Ok, ma non c'č niente di free scaricabile da Internet? Francamente io i
reference cartacei li trovo obsoleti. Anche un semplice file di testo
risulta molto piů comodo e versatile.
EMG

 (comprende quello della libreria) a $18 come .PDF.
Io odio il formato PDF!
EMG

 Io odio il formato PDF!
Peccato, perche` sempre piu` materiali importanti sono
disponibili solo o principalmente cosi`.
Alex

 disponibili solo o principalmente cosi`.
E' vero, ma penso di non sbagliare dicendo che sono pensati per la
stampa e non per la consultazione su computer, per la quale tale formato
č veramente pessimo. Ribadisco che un semplice file di testo risulta di
gran lunga piů comodo e versatile.
EMG

 wrote in message news:386FCB3E...@flashnet.it...

Per la consultazione su computer, personalmente preferisco HTML;
un plain-text e` di gran lunga troppo povero, poiche` non puo`
includere agevolmente puntatori ad altri documenti (o altrove entro
lo stesso documento), font molteplici (per enfasi ecc ecc), eccetera.
Se l'HTML non e` fra le opzioni, PDF e plain-text presentano diversi
vantaggi e svantaggi in termini di consultazione su computer (e`
chiaro che PDF ha quasi solo vantaggi se intendi stampare...!-).
Comunque, mi pare che il dibattito in questo contesto sia accademico.
Non conosco nessun ente che venda lo standard C++ in plain-text,
e nessuno che ne regali un ampio sottoinsieme (reference della
libreria standard) in alcun formato.
Alex

 sia piu' un errore di trascrizione.
Giusto; infatti c'e` un rimando a 21.3.5 che, naturalmente,
non elenca questo fantomatico metodo.
Credo ci sia reperibile in rete un DB degli errori nello standard
sinora segnalati, e relative correzioni (penso che legalmente
non sia possibile alterare il testo dello standard stesso); forse
si trova l'URL dalle FAQ di comp.std.c++.
Alex