Aber bei dem programm kommt bei mir eine Fehlermeldung.
In function `int main()':
ISO C++ forbids declaration of 'it' with no type
cannot convert 'std::_Rb_tree_const_iterator<int>' to 'int' in initialization
Das set ( http://www.cplusplus.com/reference/stl/set/ ) ist das, was die eigentliche Arbeit macht. Es sorgt dafür, dass keine Zahl doppelt vorkommt und dass sie geordnet werden.
Deine Aufgabe ist es ja jetzt, diese Dinge mit den von dir gewünschten Arrays zu implementieren.
Zuletzt bearbeitet von Dobi am 16:00:15 01.02.2012, insgesamt 1-mal bearbeitet
template <class RandomAccessIterator, class Size, class RandomNumberGenerator>
void random_shuffle_n (RandomAccessIterator first,
RandomAccessIterator last,
Size N,
RandomNumberGenerator& rng)
{
iterator_traits<RandomAccessIterator>::difference_type distance = last - first, i;
for (; i < N; ++i)
swap(first[i], first[rng() % distance]);
}
template <class RandomAccessIterator, class Size>
void random_shuffle_n (RandomAccessIterator first,
RandomAccessIterator last,
Size N)
{
random_shuffle_n(first, last, N, std::rand);
}
int counter () { static int current = 0; return ++current; }
int main()
{
vector<int> zahlen;
generate_n(back_inserter(zahlen), 49, counter);
for (int i = 0; i < 12; ++i )
{
random_shuffle_n(zahlen.begin(), zahlen.end(), 6);
ostream_iterator<int> out_it (cout," ");
sort(zahlen.begin(), zahlen.begin()+6);
copy(zahlen.begin(), zahlen.begin()+6, out_it);
cout << '\n';
}
}
template <class RandomAccessIterator, class Size, class RandomNumberGenerator>
void random_shuffle_n (RandomAccessIterator first,
RandomAccessIterator last,
Size N,
RandomNumberGenerator& rng)
{
iterator_traits<RandomAccessIterator>::difference_type distance = last - first, i;
for (; i < N; ++i)
swap(first[i], first[rng() % distance]);
}
template <class RandomAccessIterator, class Size>
void random_shuffle_n (RandomAccessIterator first,
RandomAccessIterator last,
Size N)
{
random_shuffle_n(first, last, N, std::rand);
}
int counter () { static int current = 0; return ++current; }
int main()
{
vector<int> zahlen;
generate_n(back_inserter(zahlen), 49, counter);
for (int i = 0; i < 12; ++i )
{
random_shuffle_n(zahlen.begin(), zahlen.end(), 6);
ostream_iterator<int> out_it (cout," ");
sort(zahlen.begin(), zahlen.begin()+6);
copy(zahlen.begin(), zahlen.begin()+6, out_it);
cout << '\n';
}
}
template <class RandomAccessIterator, class Size, class RandomNumberGenerator>
void random_shuffle_n (RandomAccessIterator first,
RandomAccessIterator last,
Size N,
RandomNumberGenerator& rng)
{
iterator_traits<RandomAccessIterator>::difference_type distance = last - first, i;
for (; i < N; ++i)
swap(first[i], first[rng() % distance]);
}
template <class RandomAccessIterator, class Size>
void random_shuffle_n (RandomAccessIterator first,
RandomAccessIterator last,
Size N)
{
random_shuffle_n(first, last, N, std::rand);
}
int counter () { static int current = 0; return ++current; }
int main()
{
vector<int> zahlen;
generate_n(back_inserter(zahlen), 49, counter);
for (int i = 0; i < 12; ++i )
{
random_shuffle_n(zahlen.begin(), zahlen.end(), 6);
ostream_iterator<int> out_it (cout," ");
sort(zahlen.begin(), zahlen.begin()+6);
copy(zahlen.begin(), zahlen.begin()+6, out_it);
cout << '\n';
}
}
Zuletzt bearbeitet von SeppJ am 16:46:22 01.02.2012, insgesamt 1-mal bearbeitet
Hatte ich mir auch überlegt, aber weil es im Standard keinen random_shuffle_n gibt und ich zu faul war, das auch noch zu machen, hab´ ich´s sein gelassen.
PS:
Wenn du den RandomNumberGenerator nicht als Referenz sondern per Value übergibst kann man auch temporäre Generatorobjekte benutzen.
_________________ 1. Dies ist die erste Regel des Tautologieclubs.
Zuletzt bearbeitet von DocShoe am 16:49:02 01.02.2012, insgesamt 1-mal bearbeitet
Hehe, hübsch.
Irgendwie déjà-vue ich gerade. Hatten wir sowas nicht schonmal und damals sogar rumgerechnet und profiled bis welches n es schneller ist, einfach solange Zahlen zu ziehen bis man n verschiedene hat?
Hehe, hübsch.
Irgendwie déjà-vue ich gerade. Hatten wir sowas nicht schonmal und damals sogar rumgerechnet und profiled bis welches n es schneller ist, einfach solange Zahlen zu ziehen bis man n verschiedene hat?
Ja, das haben wir alle paar Monate mal. Bei 6 aus 49 haben (leider) immer die naiven Wegwerfalgorithmen gewonnen, also wie z.B. deiner (wobei vector dort deutlich schneller wäre als set, weil die Zahl 6 so klein ist). Was natürlich für Anfänger nicht so doll ist, weil sie dann keine Motivation haben, bessere Algorithmen zu benutzen. Aber für Fortgeschrittene wieder gut, weil sie sehen, dass primitiv nicht unbedingt schlecht ist.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.