Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-07-2012, 19:12   #21
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da neski Guarda i messaggi
e std:: cosa sarebbe?sta a significare che crea un vettore standard?perchè non trovo niente in rete,anche se l' ho già visto molte volte
std è la libreria da cui prende la classe vector.
Se a inizio del codice metti "using namespace std;", sottintendi che vector lo deve cercare in std e l'anteposizione o meno di "std::" è ininfluente. Bender non lo ha specificato quindi è obbligato ad anteporre std::
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 19-07-2012, 19:41   #22
bender86
Member
 
L'Avatar di bender86
 
Iscritto dal: Mar 2008
Messaggi: 47
Vediamo di commentare passo passo:
Codice:
// Crea un vettore contenente numeri da 1 a max.
std::vector<int> numbers(max);
for (int i = 0; i < max; ++i) {
    numbers[i] = i + 1;
}
std::vector<T> è un vettore di elementi di tipo T. Più o meno è equivalente agli array C-style (T numbers[max]. Gli elementi sono accessibili dall'indice 0 all'indice max-1 ma, dato che le palline nel lotto partono da 1, alla posizione i-esima c'è la pallina i+1-esima (in effetti credo sia più chiaro così che nel mio primo esempio).
Quindi il vettore numbers contiene:
Codice:
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
...
numbers[89] = 90;
A questo punto mischiamo il vettore con std::random_shuffle(), in questo modo il vettore sarà ordinato casualmente.

Gli algoritmi della libreria standard di norma prendono come parametri degli iteratori. Cosa sia un iteratore è un po' complesso, ma in sostanza è la generalizzazione di un puntatore ad un elemento di un array. Un iteratore "punta" ad un elemento di un contenitore. Incrementando l'iteratore si ottiene l'elemento successivo, decrementandolo si ottiene l'elemento precedente. Dereferenziandolo (con l'operatore *) si ottiene l'elemento puntato.
Codice:
int array[4] = {1, 2, 3, 4};
int * inizio = & array[0]; // *inizio = 1
int * i = inizio; // *i = 1
i++; // *i = 2
int * fine = inizio + 4; // fine punta appena oltre la fine dell'array
fine--; // *fine = 4
Codice:
std::vector<int> vettore = {1, 2, 3, 4}; // In realtà questa inizializzazione non è possibile,
                                         // ma assumi che contenga quegli elementi.
std::vector<int>::iterator inizio = vettore.begin(); // *inizio = 1
std::vector<int>::iterator i = inizio; // *i = 1
i++; // *i = 2
std::vector<int>::iterator fine = inizio + 4; // fine punta appena oltre la fine del vettore
fine--; // *fine = 4
Quindi la linea seguente mischia tutti gli elementi compresi tra l'inizio e la fine del vettore (cioè tutti gli elementi del vettore):
Codice:
std::random_shuffle(numbers.begin(), numbers.end());
Alla fine si crea un altro vettore di n elementi e ci si copiano dentro i primi n elementi del vettore numbers, che saranno casuali. std::copy() funziona sempre con gli iteratori: copia dall'inizio del vettore fino all'inizio del vettore più n posizioni, a partire dall'inizio del vettore 'result'.
Codice:
std::vector<int> result(n);
std::copy(numbers.begin(), numbers.begin() + n, result.begin());
È ancora equivalente ad usare array C-style:
Codice:
int vettore[10] = {...};
int result[3];
int * inizio_vettore = & vettore[0];
int * inizio_result = & result[0];
std::copy(inizio_vettore, inizio_vettore + 3, inizio_result)

// Oppure

int * i, *j;
for (i = inizio_vettore, j = inizio_result; i != inizio_vettore + 3; ++i, ++j) {
    *j = *i;
}
In effetti in questo particolare esempio è un'operazione inutile, sarebbe meglio semplicemente ridurre la dimensione del vettore numbers e restituire quest'ultimo. Ma nel caso volessi fare più estrazioni allora l'esempio sarebbe perfetto.

L'ultimo blocco nel main() serve a stampare i risultati. Nota che uso const_iterator e non iterator perché non mi serve modificare gli elementi.


std::vector è definito nell'header <vector>
std::random_shuffle() e std::copy() sono definite nell'header <algorithm>
std::cout è definito nell'header <iostream>
std::srand() è definita nell'header <cstdlib>
std::time() è definita nell'header <ctime>

Quindi servono tutti gli header (anche se alcuni compilatori potrebbero essere poco severi nel caso ne manchi qualcuno).


std::vector indica che il simbolo 'vector' (in questo caso una classe template) sta nel namespace 'std' (che è il namespace della libreria standard). I namespace permettono di avere simboli con lo stesso nome (ad esempio puoi scrivere la tua classe 'vector', purché sia definita in un namespace diverso).
Usare "using namespace std;" non è considerata una buona pratica perché equivale a non usare namespace. In ogni caso non usarlo mai in un header, poiché si propagherebbe in tutti i file che lo includono.

std::vector è una classe che rappresenta un vettore, così come std::list rappresenta una lista, std::stack una pila, std::queue una coda... In C++ non dovresti mai usare array C-style direttamente, queste classi li incapsulano offrendo un'interfaccia più sicura.
bender86 è offline   Rispondi citando il messaggio o parte di esso
Old 19-07-2012, 21:01   #23
IngMetallo
Senior Member
 
L'Avatar di IngMetallo
 
Iscritto dal: Feb 2011
Messaggi: 2013
Quote:
Originariamente inviato da neski Guarda i messaggi
e std:: cosa sarebbe?sta a significare che crea un vettore standard?perchè non trovo niente in rete,anche se l' ho già visto molte volte
EDIT: non avevo visto la pagina 2 con il commento di demos88 e avevo risposto anche io, scusate !

Approfitto per aggiungere un consiglio: Studiare per bene la Standard Template Library (STL) che aiuta veramente molto nello sviluppo dei programmi ! Magari in cose semplici si va a scrivere più codice, ma ne vale la pena perché sono affidabili e comode.
__________________
CPU: Intel i5 2500k; GPU: Asus GTX 970 ; Scheda audio: Asus Xonar U7; RAM: 16GB DDR3; Storage: HD 750GB+SSD Samsung 840 (128GB); OS: Arch Linux | Linux Mint 18 | Win 7 (gaming)
Thread ufficiali : Linux Mint 18 | Ubuntu 16.04
| Desktop Environments & Window Manager per Linux

Ultima modifica di IngMetallo : 19-07-2012 alle 21:08.
IngMetallo è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2012, 00:20   #24
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da neski Guarda i messaggi
e std:: cosa sarebbe?sta a significare che crea un vettore standard?perchè non trovo niente in rete,anche se l' ho già visto molte volte
Da dove stai imparando il C++? Probabilmente cambiare fonte di apprendimento potrebbe essere una buona idea, perchè questa domanda fa pensare che un libro diverso sarebbe meglio.
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 20-07-2012 alle 01:30.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 20-07-2012, 14:46   #25
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
AnonimoVeneziano eh già
neski è offline   Rispondi citando il messaggio o parte di esso
Old 21-07-2012, 00:14   #26
IngMetallo
Senior Member
 
L'Avatar di IngMetallo
 
Iscritto dal: Feb 2011
Messaggi: 2013
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
Da dove stai imparando il C++? Probabilmente cambiare fonte di apprendimento potrebbe essere una buona idea, perchè questa domanda fa pensare che un libro diverso sarebbe meglio.
Purtroppo in alcuni testi cose basilari come i namespace vengono trattate negli ultimi capitoli.. sul libro che ho io (Deitel&Deitel dell'Apogeo) vengono trattati addirittura nel secondo libro di "tecniche avanzate". La semplice soluzione in questi casi è cercare su internet quello che non si capisce e non accontentarsi mai di far funzionare un programma senza capirne il perché.
__________________
CPU: Intel i5 2500k; GPU: Asus GTX 970 ; Scheda audio: Asus Xonar U7; RAM: 16GB DDR3; Storage: HD 750GB+SSD Samsung 840 (128GB); OS: Arch Linux | Linux Mint 18 | Win 7 (gaming)
Thread ufficiali : Linux Mint 18 | Ubuntu 16.04
| Desktop Environments & Window Manager per Linux
IngMetallo è offline   Rispondi citando il messaggio o parte di esso
Old 22-07-2012, 10:54   #27
neski
Junior Member
 
Iscritto dal: Jul 2012
Messaggi: 29
Quote:
Originariamente inviato da IngMetallo Guarda i messaggi
Purtroppo in alcuni testi cose basilari come i namespace vengono trattate negli ultimi capitoli.. sul libro che ho io (Deitel&Deitel dell'Apogeo) vengono trattati addirittura nel secondo libro di "tecniche avanzate". La semplice soluzione in questi casi è cercare su internet quello che non si capisce e non accontentarsi mai di far funzionare un programma senza capirne il perché.
IngMetallo giustissimo...anche se non sempre è facile trovare materiale....comunque volevo ringraziare te,bender,demos88 e tutti gli altri che hanno cercato di autarmi mi avete aiutato moltissimo e non solo per sto programma grazie a tutti!
neski è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Elgato Embrace: una sedia ergonomica pro...
Brad Pitt torna in pista: F1 – Il Film a...
Hitachi Vantara annuncia la sua AI Facto...
Brembo passa all'alluminio riciclato al ...
HONOR pronta a sfidare gli iPad Pro con ...
OpenAI esce allo scoperto: confermati i ...
In arrivo altri due prodotti da Apple en...
Il tool per aggiornare da Windows 10 a W...
Rishi Sunak entra in Microsoft e Anthrop...
Porsche in poche ore chiude la formazion...
iPhone 17 disponibili su Amazon al prezz...
La Ferrari Elettrica non è la cau...
Ricarica da record: Zeekr supera i 1.300...
Un 'capezzolo' con feedback aptico al po...
Porsche Taycan Rush a Misano: prima al v...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v