- Erinnern Sie sich an den Bubblesort-Algorithmus aus der Einführung in die Programmierung?
void bubblesort(double* buf, uint32_t size) {
for (uint32_t i = 0; i < size; ++i) {
for (uint32_t j = 0; j < size - i - 1; ++j) {
if (buf[j] > buf[j + 1])
swap(buf[j], buf[j + 1]);
}
}
}
Für den Algorithmus fehlt nur noch die Implementierung von swap
. Nur eine der folgenden drei Implementierungen produziert einen funktionierenden Sortieralgorithmus.
Welche ist es und warum funktionieren die anderen Implementierungen nicht?
void swap(double x, double y) {
double tmp = x;
x = y;
y = tmp;
}
void swap(double &x, double &y) {
double tmp = x;
x = y;
y = tmp;
}
void swap(double &x, double &y) {
x = y;
y = x;
}
- Verändern Sie
bubblesort
und swap
derartig, dass Pointer verwendet werden, d.h. swap
hat danach die Signatur void swap(double *x, double *y)
.
In C++ sollten Sie immer Referenzen bevorzugen, wo es möglich ist, aber es ist dennoch wichtig, die korrekte Syntax für Pointer zu kennen.
- Der folgende Code lässt sich unter
GCC 8.4.0
kompilieren, stürzt aber mit der Meldung Segmentation fault (core dumped)
ab. Erklären Sie, woran das Problem liegt und reparieren Sie den Code.
#include <cstdint>
#include <iostream>
#include <string>
std::string& as_binary_string(uint64_t num) {
std::string s;
for (int32_t i = 0; i < 64; ++i) {
char digit = (num & (1ull << (63 - i))) == 0 ? '0' : '1';
s.push_back(digit);
}
return s;
}
int main() {
std::string bin = as_binary_string(420);
std::cout << bin << "\n";
}
- Der folgende Code ist dem obigen sehr ähnlich, funktioniert aber einwandfrei.
Wieso hat dieser Code nicht dasselbe Problem wie der andere?
#include <iostream>
#include <string>
char& central_character(std::string &s) {
return s[s.size() / 2];
}
int main() {
std::string text = "HelloWorld!";
central_character(text) = 'X';
std::cout << text << "\n";
}
- Der folgende Code lässt sich unter
GCC 8.4.0
nicht kompilieren. Erklären Sie, wo das Problem liegt.
#include <cstdint>
int main() {
int32_t k = 5;
int32_t& i = k * 20;
}
#include <cstdint>
#include <string>
void print_multiple_times(std::string &str, int32_t times) {
for (int32_t i = 0; i < times; ++i) {
std::cout << str;
}
}
int main() {
print_multiple_times(std::string("bla"), 20);
}