Попробуйте выполнить слияние строк в c ++, но что-то не так.
Я использую vscode с clang и не вижу никаких ошибок / проблем при компиляции, но он просто останавливается и открывает имя файла "char_traits.h "тогда показывать вот так при запуске кода.
Затем я попытался скомпилировать на codepad.org, и он показывает
std::logic_error: basic_string::_S_construct NULL not valid
Aborted.
#include <iostream>
#include <limits>
using namespace std;
template <typename T> void merge(T *arr, int left, int mid, int right) {
int leftLength = mid - left + 1;
int rightLength = right - mid;
T *L = new T[leftLength];
T *R = new T[rightLength];
for (int i = 0; i < leftLength; i++)
L[i] = arr[left + i];
for (int i = 0; i < rightLength; i++)
R[i] = arr[mid + 1 + i];
L[leftLength] = numeric_limits<T>::max();
R[rightLength] = numeric_limits<T>::max();
int leftIndex = 0, rightIndex = 0;
for (int i = left; i <= right; i++) {
if (L[leftIndex] <= R[rightIndex]) {
arr[i] = L[leftIndex];
leftIndex++;
} else {
arr[i] = R[rightIndex];
rightIndex++;
}
}
}
template <typename T> void mergeSort(T *arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
int main() {
string a[3];
a[0] = "abc";
a[1] = "afd";
a[2] = "fhe";
mergeSort(a, 0, 2);
for (int i = 0; i < 3; i++) {
cout << a[i] << endl;
}
return 0;
}
Я потерян.Спасибо!