Permalänk
Medlem

g++ std::sort implementation

Hej!

Jag försöker hitta gnu g++ (gcc) source för std::sort() för att jag har en skol uppgift att analysera den.
Hur som helst har jag inte lyckas hitta detta vilket jag tycker är konstigt då det ska vara opensource,
om någon veta vart jag kan hitta den skicka gärna en link och jag försöker fortfarande hitta den.

tack för svar!

Visa signatur

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Permalänk

har du inkluderat "<algorithm>"?

Inkludera enligt detta kodexempel.

Visa signatur

| MacBook Pro 2016 Touch Bar 15" |

| 16GB Ram DDR4 2133 MHz | i5 6500k | RX 480 4GB | ASUS Z170-A | Fractal Design XL | Corsair TX650W |

CITERA FÖR SVAR

Permalänk
Medlem

Alltså jag tror du har missuppfattat det jag är ute efter, jag ska läsa source coden i en kurs för att analysera den. (KODEN)

Visa signatur

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Permalänk
Medlem

Har du testat googla på "gcc source download"?

Visa signatur

Chassi: DAN A4 | MB: ASUS VI Impact | GPU: Titan X | CPU: 4770K | RAM: 2x8GB Corsair Vengeance | SSD: Samsung 830 512GB | Skärm: ASUS Swift IPS

Permalänk
Medlem

hitta inget vettigt då men hitta denna link

Visa signatur

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Permalänk
Medlem

Är inte den olika per typ?
Men en implementation för list:
http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-api-4.6/a00...

Permalänk
Datavetare

För g++ 4.7 och 4.8 installerade under Ubuntu hittar du implementationen under

/usr/include/c++/4.7/bits/stl_algo.h /usr/include/c++/4.8/bits/stl_algo.h

Detta förutsätter att du installerat g++ med

$ apt-get install g++

Börja läs filen från slutet, där hittar du definitionen av sort(), sedan finns massor med template-specialization för olika iterator-typer. Måste säga att det är en ganska svårt uppgift då det tyvärr är väldigt svårt att läsa template-kod.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

För g++ 4.7 och 4.8 installerade under Ubuntu hittar du implementationen under

/usr/include/c++/4.7/bits/stl_algo.h /usr/include/c++/4.8/bits/stl_algo.h

Detta förutsätter att du installerat g++ med

$ apt-get install g++

Börja läs filen från slutet, där hittar du definitionen av sort(), sedan finns massor med template-specialization för olika iterator-typer. Måste säga att det är en ganska svårt uppgift då det tyvärr är väldigt svårt att läsa template-kod.

Av ren nyfikenhet undrar jag bara; är det svårt att läsa template-koden pga av att det är så otydligt eller att koden i sig, alltså rent kunskapsmässigt, är avancerad? Har aldrig gått in där och kollat/pillat.

Permalänk
Medlem
Skrivet av Alotiat:

Av ren nyfikenhet undrar jag bara; är det svårt att läsa template-koden pga av att det är så otydligt eller att koden i sig, alltså rent kunskapsmässigt, är avancerad? Har aldrig gått in där och kollat/pillat.

Ta en kik på länken som postades innan, http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-...
Men, svaret i det här fallet är både och. Avancerade algoritmer, men kanske mer att templates i C++ är fasansfulla...

Permalänk
Datavetare
Skrivet av Alotiat:

Av ren nyfikenhet undrar jag bara; är det svårt att läsa template-koden pga av att det är så otydligt eller att koden i sig, alltså rent kunskapsmässigt, är avancerad? Har aldrig gått in där och kollat/pillat.

I detta fall handlar det om väldigt enkla algoritmer, handlar om saker som man lär sig i sin första högskolekurs om algoritmer. Men titta på koden

template<typename _RandomAccessIterator> inline void sort(_RandomAccessIterator __first, _RandomAccessIterator __last) { typedef typename iterator_traits<_RandomAccessIterator>::value_type _ValueType; // concept requirements __glibcxx_function_requires(_Mutable_RandomAccessIteratorConcept< _RandomAccessIterator>) __glibcxx_function_requires(_LessThanComparableConcept<_ValueType>) __glibcxx_requires_valid_range(__first, __last); if (__first != __last) { std::__introsort_loop(__first, __last, std::__lg(__last - __first) * 2); std::__final_insertion_sort(__first, __last); } }

"typename _RandomAccessIterator" är bara en konversion, _RandomAccessIterator kan vara vilken typ som helst men det kommer bara kompilera om den uppfyller kraven för en RandomAccessIterator. Inte supersvårt, men kan man inte redan C++ så lär man vara lost redan där.

__glibcxx_function_requires raderna är lite trix för att kunna ge lite vettigare fel om man stoppar in "fel" typ.

är bara två rader som faktiskt betyder något här

std::__introsort_loop(__first, __last, std::__lg(__last - __first) * 2);
std::__final_insertion_sort(__first, __last);

och dessa är inte helt uppenbara för någon som inte är väldigt van med C++. Templates är lätt att använda, läsa kod (eller skriva) som innehåller templates är ofta väldigt svårt! Som tur är kan man göra extremt mycket i C++ genom att bara använda template-kod som andra redan skrivit, t.ex. C++ standard template bibliotek där bl.a. std::sort() finns.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer