Anonymní profil Longin – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Longin – Programujte.comAnonymní profil Longin – Programujte.com

 

Příspěvky odeslané z IP adresy 84.21.106.–

C / C++ › median z prvků celého kontej…
7. 9. 2015   #204814

#6 vitamin
to není problém

dokonce se chystám na knihy od Scota Meyerse (Effective C++ atd)

C / C++ › median z prvků celého kontej…
7. 9. 2015   #204802

#4 vitamin
bohužel v češtině nevím o žádné lepší knize. Zkoušel jsem ty dokola doporučované knihy jako je Mistrovství v C++, Myslíme v jazky C++ (Eckel), Naučte se C++ za 21 dní, ale nevyhovovaly mi (důraz na C styl na úkor OOP v C++, zastaralé). Na této vyjímečné knize se mi líbí, že používá od začátku STL. Bylo jí vytýkáno, že to není kniha pro začátečníky, což mě tolik nevadí, protože znám čisté C a OOP z Javy.

Snad nebude pro mě problém se pak doučit novinky z dalších standartů (např C+11 je v QT toolchainu a IDE, co používám, stále jako experimentální)

C / C++ › median z prvků celého kontej…
6. 9. 2015   #204786

#1 Longin
aha, tak stačilo jenom si pročíst něco znovu o kapitole šablon...

Šablona je napsána správně, ale pokud v argumentech není jednoznačně určeny typy všech argumentů šablony, tak je ho třeba zpecifikovat při volání.

int pole [] = {1, 9, 2, 8, 3, 7, 5};
    vector<int> vec(pole, pole + 7);
    cout << median(pole, pole +7) << endl; //nefunguje
    cout << median<int>(pole, pole +7) << endl;
    cout << median<int>(vec.begin(), vec.end()) << endl;
C / C++ › median z prvků celého kontej…
6. 9. 2015   #204785

Zdravím

Řeším cvičení z knížky Rozumíme C++ (Andrew Koenig, Barbara E. Moo) a to konkrétně kapitola 10 cvičení 10.2.

O  co jde?

Máme pomocí šablonové funkce napsanou funkci pro nalezení střední hodnoty z prvků kontejneru vector

template <class T>
T median(vector<T> v)
{
#ifdef _MSC_VER
        typedef typename std::vector<T>::size_type vec_sz;
#else
	typedef typename vector<T>::size_type vec_sz;
#endif

	vec_sz size = v.size();
	if (size == 0)
		throw domain_error("median of an empty vector");

	sort(v.begin(), v.end());

	vec_sz mid = size/2;

	return size % 2 == 0 ? (v[mid] + v[mid-1]) / 2 : v[mid];
}

Úkolem je tuto šablonu přepsat aby fungovala kromě vectoru i na Céčkovské pole.

Zkoušel jsem toto: udělat si lokální kopii kontejneru ohraničenou iterátory a a obdobným způsobem najít prostřední prvek.

template <class T, class Iterator>
T median(Iterator begin, Iterator end) {
  if (begin == end)
    throw domain_error("median of an empty container");
  vector<T> temp;
  for ( ; begin != end; ++begin)
    temp.push_back(*begin);
  sort(temp.begin(), temp.end());
  size_t mid = temp.size() / 2;
  T ret = (temp.size() % 2 == 0)
    ? (temp[mid] + temp[mid - 1]) / 2
    : temp[mid];
  return ret;
}


Tato šablona ale nefunguje protože při volání funkce kompilátor řve "no matching function"...

Mohl by mi někdo prosím poradit? Vygoogloval jsem řešení pomocí knihovny <array>, ale ta je součástí až C++11 verze.

Longin
C / C++ › (Visual C++ 2008) Konverze s…
28. 4. 2012   #157135

Zdravím

dělám takový program ve visual c++ studiu 2008 a už hodinu se vztekám nad tímto problémem

Mám char pole[20] a v GUI designeru TextBox. No a samozřejmě řeším jak C++ String z TextBoxu převést na to moje pole znaků. Proč nemůžu pracovat s objektovým stringem se prosím neptejte, protože výuka u nás (nechápu proč) je klasické C a GUI si klikáme v designeru.

Přes různý c_str() toCharArray() apod C++ funkce jsem se k ničemu nedokopal, jelikož moje znalosti OOP C++ jsou nulové.

Naposledy jsem se doogugloval k tomuhle a nepomohlo :(

strcpy(pole,System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(this->TB_jmeno->Text));

Jestli mi někdo pomůže, tak budu moc rád

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý