Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
ERR_ADDRESS_UNREACHABLE

Legea 18/1968 Se mai aplica?

Digi conectare 2 routere prin fir

Succesiune notar versus instanta ...
 Montaj aer conditionat in balcon ...

Cont curent mulți valuta far...

Sugestii plan casa

Experiente cu firme care cumpara ...
 joc idem Half Life gratis

PC game stream catre Nvidia Shiel...

Pompa de apa HEPU ?!

Vreau o masina electrica de tocat...
 Cum ajunge remorca de tir inapoi ...

Alt "Utilizator nou" pe T...

ULBS INFORMATICA

Index preturi
 

Ce a ajuns C++

- - - - -
  • Please log in to reply
25 replies to this topic

#1
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Limbajul C++ e mult mai puternic decat au multi impresia. Cum puterea e adesea acompaniata de complexitate, standardele mai noi au contribuit considerabil la reducerea acestei complexitati.

Sa luam un exemplu:

Quote

As dori sa pot itera prin toate elementele produsului cartezian a n containere.

Adica, daca am ('a', 'b', 'c', 'd') si (1, 2, 3), vreau sa pot afisa pe ecran:
a 1
a 2
a 3
b 1
b 2
b 3
c 1
c 2
c 3
d 1
d 2
d 3


O prima solutie ar folosi doua bucle for, dar ce fac daca vreau un cod mai generic, daca nu stiu in avans de cate bucle for am nevoie?

C++-ul modern imi permite sa creez o functie foarte usor de folosit:

int main()
{
	char letters[] { 'a', 'b', 'c', 'd' };
	std::vector<int> numbers{ 1, 2, 3 };

	cartesianProduct([](char letter, int number)
	{
		std::cout << letter << ' ' << number << '\n';
	}, letters, numbers);
}


Ii ofer containerele si ce sa faca, iar ea imi va chema acel callback pentru fiecare set de valori. Se observa si ca ma ales containere diferite pentru litere si numere, functiei nu ii pasa.

E atat de generica, incat ii pot da usor inca un container:

int main()
{
	char letters[] { 'a', 'b', };
	std::vector<int> numbers{ 1, 2, 3 };
	std::string strings[] { "abc", "def" };

	cartesianProduct([](char letter, int number, const std::string& str)
	{
		std::cout << letter << ' ' << number << ' ' << str << '\n';
	}, letters, numbers, strings);
}


Quote

a 1 abc
a 1 def
a 2 abc
a 2 def
a 3 abc
a 3 def
b 1 abc
b 1 def
b 2 abc
b 2 def
b 3 abc
b 3 def

Cum arata codul efectiv? Nu foarte frumos, dar usor de inteles
Spoiler

Oare ce assembly va genera acest cod? Suprinzator, daca efectuez un calcul constant, compilatorul merge pana intracolo incat sa introduca constanta rezultata in assembly: https://godbolt.org/g/kV6CpM

Edited by dani.user, 26 May 2018 - 14:39.


#2
tehnics

tehnics

    acolo unde vara-i zi la miezul noptii

  • Grup: Senior Members
  • Posts: 30,827
  • Înscris: 01.11.2005
Eu niciodata nu am reusit sa inteleg C, C++. Stiu VB, VB.NET, am incercat si C++, dar nu am reusit sa inteleg...neuronii mei refuzau sa faca logica. :)

#3
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,428
  • Înscris: 10.08.2005
"refuzau", dar acum accepta?


#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,428
  • Înscris: 10.08.2005
Totusi, sa ne intoarcem la ce plus plus
Despre AI, Orwel, si cum se contureaza viitorul in industrie avem alte topice.


Discutia a fost mutata: https://forum.softpe...eligenta-umana/

Edited by dani.user, 26 May 2018 - 14:41.


#5
Mr_nobody_

Mr_nobody_

    Senior Member

  • Grup: Senior Members
  • Posts: 5,000
  • Înscris: 03.02.2017

View Postdani.user, on 26 mai 2018 - 12:58, said:

int main()
{
char letters[] { 'a', 'b', 'c', 'd' };
std::vector<int> numbers{ 1, 2, 3 };

cartesianProduct([](char letter, int number)
{
std::cout << letter << ' ' << number << '\n';
}, letters, numbers);
}

În Python e mai complicat: :)
import itertools
for element in itertools.product(["a", "b", "c", "d"],[1, 2, 3]):
	print(element)



#6
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Python are avantajul ca poate amesteca tipurile de date. Dar il costa timp si memorie.

#7
tehnics

tehnics

    acolo unde vara-i zi la miezul noptii

  • Grup: Senior Members
  • Posts: 30,827
  • Înscris: 01.11.2005

View PostMarianG, on 26 mai 2018 - 13:20, said:

"refuzau", dar acum accepta?
nici acum, dar oricum nu mai am resursele necesare pentru a studia asa ceva...

#8
halflife

halflife

    Member

  • Grup: Members
  • Posts: 761
  • Înscris: 31.05.2015
Macar sa ajunga C++ mai profitabil.

#9
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,600
  • Înscris: 30.07.2003
Dar este. Eu am trait si traiesc cu el (si nu numai). Si de foame n-am murit.

#10
halflife

halflife

    Member

  • Grup: Members
  • Posts: 761
  • Înscris: 31.05.2015

View Postneagu_laurentiu, on 26 mai 2018 - 18:38, said:

Dar este. Eu am trait si traiesc cu el (si nu numai). Si de foame n-am murit.
Si cat succes ai cu el ?

#11
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,600
  • Înscris: 30.07.2003
Pai depinde ce intelegi tu prin succes. Am dat la clienti aplicatii, le merge, mai cer si ceva nou, eu traiesc din activitatea asta etc.

Edited by neagu_laurentiu, 26 May 2018 - 19:00.


#12
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018

View Postdani.user, on 26 mai 2018 - 12:58, said:

Limbajul C++ e mult mai puternic decat au multi impresia.
Puterea unei unelte depinde foarte mult la ce este folosita.
Arta ingineriei software este sa folosesti uneletele potrivite pentru taskul potrivit.
Nu exista un limbaj de programare ca virgula panaceu universal, acesta este un mit.

#13
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
N-as numi codul ala ”usor de inteles”, mai degraba “backwards fucked”

#14
jobist

jobist

    Senior Member

  • Grup: Senior Members
  • Posts: 2,746
  • Înscris: 23.04.2010
Aș zice să nu mai amestecăm noțiuni; cartesianProduct() este o funcție de bibliotecă și putea foarte bine să nu existe; deasemenea acea funcție o poți crea singur indiferent ce limbaj de programare folosești; poți crea propria bibliotecă de funcții pe care să le folosești de câte ori ai nevoie de ele.

#15
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007

View Postjobist, on 27 mai 2018 - 17:52, said:

cartesianProduct() este o funcție de bibliotecă și putea foarte bine să nu existe;

Functia e scrisa tot de mine, ascunsa in spoiler.

Edited by dani.user, 27 May 2018 - 18:08.


#16
blotunga

blotunga

    Active Member

  • Grup: Members
  • Posts: 1,186
  • Înscris: 09.04.2008
Bravo, ai descoperit template meta programming.
C++14-17 are tot felul de alte chestii mult mai interesante din punctul meu de vedere. Și C++20 o să aibă chiar chestii pe care le are Java de vro 25 de ani. De genul string.beginsWith() etc.
În fine, nu scula e importantă ci cum o folosești. Am văzut cod c++ scris varză dar am văzut și mega elegant.

#17
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018

View Postblotunga, on 31 mai 2018 - 22:00, said:

Bravo, ai descoperit template meta programming.
C++14-17 are tot felul de alte chestii mult mai interesante din punctul meu de vedere. Și C++20 o să aibă chiar chestii pe care le are Java de vro 25 de ani. De genul string.beginsWith() etc.
Mai bine mai tarziu decat niciodata, cine stie poate pana in 2040 , poate ii vine unuia o idee din comitetul de C++:
"Auzi hai sa cream si noi un fel de JVM ca sa poate rula codul oriunde, facandu-l cu adevarat portabil si nu semantic-portabil" =))

#18
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Cine vrea JVM are JVM (sau .NET sau altele).

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate