これは、私が実験している簡単なバブルソートです。
template<class T>
void bubbleSort(T *begin, T *end) {
for (auto index = begin + 1; index != end; ++index) {
for (auto bubble = begin; bubble != end - 1; ++bubble) {
if (*bubble > *(bubble + 1)) {
const T temp = *bubble;
*bubble = *(bubble + 1);
*(bubble + 1) = temp;
}
}
}
}
このバージョンは機能しているようです (バブルソートの栄光のすべてにおいて)。ところで、これが役立つかどうかをテストしているクラスは次のとおりです。
class Numbers {
int max;
int *numbers;
public:
Numbers(initializer_list<int> initialList) : max { initialList.size() }, numbers { new int[max] }
{
int index = 0;
for (auto it = initialList.begin(); it != initialList.end(); ++it, ++index) {
numbers[index] = *it;
}
}
int operator *(int index) { return numbers[index]; }
int *begin() { return &numbers[0]; }
int *end() { return &numbers[max]; }
};
私がやろうとしていたのは、次のように使用して、内部ループに手動スワップを書き込むことでしstd::swap
た:
for (auto bubble = begin; bubble != end - 1; ++bubble) {
if (*bubble > *(bubble + 1)) swap (bubble, bubble + 1);
}
しかし、何らかの理由でコンパイラが教えてくれます:
error C2665: 'std::swap' : none of the 3 overloads could convert all the argument types
何故ですか?