Aktywne Wpisy
Kordianyt +32
Krotka pilka do graczy PC - jaka gra z ostatnich 3 lat wywarla dla was najwieksze wrazenie i polecilibyscie dalej? Kupilem tlustego kompa i ogralbym cos nowego i ciekawego, pozdrawiam #gry #pcmasterrace #komputery
Devasto27 +69
Podejście do pochwalenia się furką numer 3! (Moderatorzy nie wiem o #!$%@? Wam chodzi serio)
Spełniłem małe marzenie i od niedawna jestem dumnym właścicielem Alfy Romeo Giulii Veloce Ti 280 KM!
Jestem niesamowicie podekscytowany i tylko czekam aż dostanę blachy i zacznę jeździć.
Z wersji wyposażeniowej ma absolutnie wszystko co dało się mieć. Frajda z jazdy jest niesamowita i przesiadka z mojej wysłużonej L3 jest przeogromna.
Można powiedzieć że taki mały prezent
Spełniłem małe marzenie i od niedawna jestem dumnym właścicielem Alfy Romeo Giulii Veloce Ti 280 KM!
Jestem niesamowicie podekscytowany i tylko czekam aż dostanę blachy i zacznę jeździć.
Z wersji wyposażeniowej ma absolutnie wszystko co dało się mieć. Frajda z jazdy jest niesamowita i przesiadka z mojej wysłużonej L3 jest przeogromna.
Można powiedzieć że taki mały prezent
Aktywne Znaleziska
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
Na pewne zadanie obliczeniowe przewidziane jest X czasu. Jeżeli się uda je rozwiązać to w porządku, a jeżeli nie to trudno - grunt, żeby nie przekroczyć czasu. Chciałbym rozwiązać wiele takich zadań, każde w osobnym wątku. Mam już coś takiego:
list threads;
for (problem : problems) {
____threads.push_back(solve(problem));
}
for (thread : threads) {
____thread.join();
}
I to ścierwo działa, bardzo ładnie działa, ale oczywiście skończy jak skończy i zwraca wszystkie rozwiązania (są one wkładane do kontenera - monitora). Wie ktoś jak inteligentnie zmodyfikować to rozwiązanie tak, żeby przestrzegało ograniczeń czasowych? Podejrzewam, że jest to dość typowy przypadek dlatego nie chce wymyślać koła na nowo.
EDIT: Czas rozwiązania problemu bardzo się różni dla poszczególnych przypadków dlatego zawsze mam pewność, że przy racjonalnym czasie część zdąży się rozwiązać, a część nie.
#programowanie #cpp #cpp11
To jak inaczej?
Co do listy, vector jest szybszy prawie w kazdym wypadku, zeby go zbudowac zrob tak:
vector threads;
for(problem : problems)
threads.emplace_back(thread([&](){solve(problem);}));
@losiul: To ciekawe. Byłem przekonany, że lista jest zbudowana tak, że każdy poprzednik zawiera wskaźnik na następnik (i być może odwrotnie), a elementy mogą sobie być rozrzucone po pamięci. Wektor natomiast musi być przebudowany (skopiowany w inne miejsce) po każdej zmianie rozmiaru i dlatego jest wolnym kontenerem.
Czym się różni emplaceback() od pushback()?
Jakbyś miał jakieś profesjonalne porównanie wydajności
std::thread jest niekopiowalny, dlatego musisz uzyc r-value reference, ktora obsluguje emplace_back. W C++11 pojawilo sie move semantics, poczytaj jesli nie slyszales o tym.
@Onoki:
push_back
bierze universal reference na typ, jaki podales w wektorze, co w praktyce zazwyczaj oznacza, ze najpierw musisz wywolac konstruktor obiektu, potem zrobic na nim
move
albo kopie, zeby dopiero go dodac do vectora. Natomiast
emplace_back
przekazuje od razu podane argumenty bezposrednio do konstruktora (perfect forwarding), ktory dzieki temu wywoluje sie tylko raz. Np. jak masz
std::vector>
, to robisz
emplace_back(4.3f, 2)
i sie