Newsgroup: it.comp.lang.c++
Titolo: ancora su vector

ciao a tutti
ho due domande:
1) se ho un vector<string> perchè  push_back(char) mi da l'errore
Error:LaClasse.h(536,73):Cannot initialize 'const
std::basic_string<char,std::string_char_traits<char>,std::allocator<char>>
&' with 'char'
non dovrebbe fare il casting???
2)se ho vector<T> a, b;
   facendo a=b il costruttore di copia mi copia tutto il contenuto di b
in a?
saluti
Valerio


Il teoria dovresti usare il metodo copy  per una copia completa
copy(vectora.begin(),vectora.end(), vectorb);
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
Ciao da Kleidemos
C++ Programmer
.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.

 Ciao da Kleidemos
grazie ciao
Valerio

 il vector.
Breve test:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void ciao(vector<int> c)
{
 for(vector<int>::iterator it=c.begin();it<c.end();it++) cout<<*it<<" ";
}
int main()
{
 vector<int> a;
 vector<int> b;
 a.push_back(1);
 a.push_back(2);
 a.push_back(3);
 a.push_back(4);
 a.push_back(5);
 a.push_back(6);
 b=a;
 a[2]=13;
 ciao(a);
 ciao(b);
}
L'output è:
1 2 13 4 5 6 1 2 3 4 5 6
Quindi direi che, come mi aspettavo che fosse, usando operator= come sopra,
b e a rimangono due vettori a se stanti, contenenti gli stessi elementi.
Successive modifiche su a non si ripercuotono in b.
Ciao.

Gabriele ha scritto:

l'avrei fatto anch'io ma tu mi hai preceduto!
saluti Valerio

 in a?
Si, serve proprio per quello.
Se il vettore contiene puntatori, l'assegnamento copia i puntatori,
non la roba a cui puntano i puntatori.
        Mauro

 copy(vectora.begin(),vectora.end(), vectorb);
Questo non compila, copy richiede degli iteratori, e vectorb non e` un
iteratore.
Se vectorb e` abbastanza grande, puoi usare vectorb.begin().
        Mauro

 Perche`?
perche se ho
string a;
char b='w';
a=b; funziona
quindi mi aspettavo cha valesse anche in una circostanza su detta

 quindi mi aspettavo cha valesse anche in una circostanza su detta
Sfortuna vuole che std::string abbia l'operatore di assegnazione di un 
char, ma non il costruttore a partire da un char.
-- 
   |   \    \  | ___|_  |_  | ianezz a casa sua... :-)
   |  _ \  | \ | _|    /   /  Visita il LinuxTrent a
  _|_/  _\_|  _|____|___|___| 
http://www.linuxtrent.it

 a=b; funziona
Questo non e` un cast, ma un assegnamento usando l'operatore
  string& string::operator = (char c)
Questo operatore, insieme alle conversioni automatiche, puo` essere
usato per codice "poco intuitivo":
  int main()
  {
    string s;
    s = 50;
    cout << s << '\n';
  }
        Mauro

 char, ma non il costruttore a partire da un char.
giusto! come ho fatto a non pensarci!
infatti
char b='a';
string a(b); non funziona

>>>non dovrebbe fare il casting???
Forse sono un pò arruginito, ma il cast implicito (o automatico, che dir 
si voglia) non avviene solo tra tipi 'primitivi' ?
Ovviamente l'utilizzo di '=' rientra nel funzionamento degli operatori e 
non più di cast....
Ancor più ovviamente se sto dicendo cose oscene sarei lieto di essere 
avvisato....

 si voglia) non avviene solo tra tipi 'primitivi' ?
Conversione o promozione. Il cast e' un'operazione esplicita per
definizione. La conversione implicita avviene anche in presenza di
costruttori di conversione (ovvero con un solo parametro e non
dichiarati explicit) o di operatori di conversione.
Ciao,
Nicola
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Nicola
Grazie Nicola...