Warum meckert Code::Blocks "undefined reference"?
-
#include <string> #include <vector> #include <iostream> #include <algorithm> template<typename T> void insert_sorted(T &v, typename T::value_type const &item) { v.insert(std::upper_bound(std::begin(v), std::end(v), item), item); } int main() { std::vector<std::string> words; char choice; std::cout << "Your list of words:\n"; while (std::cout << "Enter another word (y/n)?\n", (std::cin >> choice) && choice == 'y') { std::cout << "Next word: "; std::string word; std::cin >> word; words.push_back(word); } std::cout << "Word to insert: "; std::string word; std::cin >> word; insert_sorted(words, word); for (auto const &word : words) std::cout << word << '\n'; }
-
@JTR666 sagte in Warum meckert Code::Blocks "undefined reference"?:
castet ihn den erste, zweite usw. char auf int um, damit die Ascii-Werte der ersten Buchstaben der anderen Wörter verglichen werden können.
Ist auch eine Theorie auf sehr wackligen Beinen.
-
@Swordfish Dann ist nur meine Frage, wie die Sortierfunktion upper_bound aussieht, denn er muss ja die einzelnen Buchstaben des Wortes zu int casten, weil er ja sonst nicht der Größe nach sortieren kann.
Wie meinst du das mit den sehr wackeligen Beinen?
Sortieren geht ja bei Buchstaben am besten nach den Ascii-Werten...
-
@JTR666 sagte in Warum meckert Code::Blocks "undefined reference"?:
denn er muss ja die einzelnen Buchstaben des Wortes zu int casten
Wie kommst du auf diese Idee?
@JTR666 sagte in Warum meckert Code::Blocks "undefined reference"?:
Dann ist nur meine Frage, wie die Sortierfunktion upper_bound aussieht
https://en.cppreference.com/w/cpp/algorithm/upper_bound#Possible_implementation
-
@Swordfish Na ja, weil ich mir halt gedacht habe, dass jeder Buchstabe einen Ascii-Wert hat und man anhand diesen Wertes kann man ja wunderbar sortieren kann.
-
ja. schön.
char a = 'A'; char b = 'B';
warum soll ich jetzt
a
undb
nicht vergleichen können? Warum soll ich die zuerst nachint
casten müssen??char
,short
,int
,long
,long long
... das sind alles Integer-Typen.
-
@Swordfish Weil halt die Ascii-Werte der Buchstaben allesamt im int-Bereich liegen.
ein long int brauchste halt für (int)a == 65 halt nicht. Also das andere wäre auch gegangen, logisch, aber nicht nötig gewesen.
-
Ein
char
ist auch nur ein numerischer Wert. Ein cast zuint
bringt genau garnichts.@JTR666 sagte in Warum meckert Code::Blocks "undefined reference"?:
a == 65
Wenn Du
'A'
meinst dann schreib' bitte auch'A'
.
-
@Swordfish Sorry, meinte ich natürlich!
-
Selbst wenn ich krampfhaft auf die Standard Library verzichte komm' ich da nicht auf ~300 Zeilen:
#include <iostream> #include <vector> #include <string> template<typename T> void insert_sorted(T &collection, typename T::value_type item) { auto it{ std::begin(collection) }; for (; it != std::end(collection) && item > *it; ++it); collection.insert(it, item); } int main() { std::vector<std::string> foo{ "a", "c", "d", "f", "h" }; insert_sorted(foo, "g"); insert_sorted(foo, "b"); insert_sorted(foo, "e"); for (auto const &f : foo) std::cout << f << '\n'; }