Absurd » 27 дек 2017, 20:49
Слива писал(а):Вот написал код для переворачивания массива, но еще раз повторюсь: в С++ должна быть готовая функция reverse(), но посмотрите код на всякий случай.
С переворачиванием тут уже проскакивала тема год назад или что-то типа того. Проще сделать массив -N..N и менять знак у переменной.
Код: Выделить всё
#include <cassert>
#include <iostream>
#include <algorithm>
template <typename T, int LoBound, int HiBound> class Array {
T arr_[HiBound - LoBound + 1];
public:
Array()
{
std::fill(arr_, arr_ + sizeof(arr_) / sizeof(arr_[0]), T{});
}
Array(const Array& other)
:arr_(other.arr_)
{}
Array(std::initializer_list<T> initList)
{
std::copy(initList.begin(), initList.end(), arr_);
}
T& operator[](int ix)
{
assert(ix >= LoBound && ix <= HiBound);
return arr_[ix - LoBound];
}
const T& operator[](int ix) const
{
assert(ix >= LoBound && ix <= HiBound);
return arr_[ix - LoBound];
}
};
int main()
{
enum {LoBound = -2, HiBound = 2};
using A1D = Array<int, LoBound, HiBound>;
Array<A1D, LoBound, HiBound> arr =
{ A1D{ 1, 2, 3, 4, 5},
A1D{ 6, 7, 8, 9, 10},
A1D{11, 12, 13, 14, 15},
A1D{16, 17, 18, 19, 20},
A1D{21, 22, 23, 24, 25} };
for (int i = LoBound; i <= HiBound; ++i) {
for (int j = LoBound; j <= HiBound; ++j) {
std::cout << arr[-i][-j] << " ";
}
std::cout << "\n";
}
return 0;
}
Слива писал(а):Написано на C++Builder 6 - как всегда.
Зачем такое говно мамонта? Вижуал студию 2017 можно скачать нахаляву, там можно в x64 компилировать и новый стандарт языка поддерживается.
[quote="Слива"]Вот написал код для переворачивания массива, но еще раз повторюсь: в С++ должна быть готовая функция reverse(), но посмотрите код на всякий случай. :D [/quote]
С переворачиванием тут уже проскакивала тема год назад или что-то типа того. Проще сделать массив -N..N и менять знак у переменной.
[code]
#include <cassert>
#include <iostream>
#include <algorithm>
template <typename T, int LoBound, int HiBound> class Array {
T arr_[HiBound - LoBound + 1];
public:
Array()
{
std::fill(arr_, arr_ + sizeof(arr_) / sizeof(arr_[0]), T{});
}
Array(const Array& other)
:arr_(other.arr_)
{}
Array(std::initializer_list<T> initList)
{
std::copy(initList.begin(), initList.end(), arr_);
}
T& operator[](int ix)
{
assert(ix >= LoBound && ix <= HiBound);
return arr_[ix - LoBound];
}
const T& operator[](int ix) const
{
assert(ix >= LoBound && ix <= HiBound);
return arr_[ix - LoBound];
}
};
int main()
{
enum {LoBound = -2, HiBound = 2};
using A1D = Array<int, LoBound, HiBound>;
Array<A1D, LoBound, HiBound> arr =
{ A1D{ 1, 2, 3, 4, 5},
A1D{ 6, 7, 8, 9, 10},
A1D{11, 12, 13, 14, 15},
A1D{16, 17, 18, 19, 20},
A1D{21, 22, 23, 24, 25} };
for (int i = LoBound; i <= HiBound; ++i) {
for (int j = LoBound; j <= HiBound; ++j) {
std::cout << arr[-i][-j] << " ";
}
std::cout << "\n";
}
return 0;
}
[/code]
[quote="Слива"]Написано на C++Builder 6 - как всегда. [/quote]
Зачем такое говно мамонта? Вижуал студию 2017 можно скачать нахаляву, там можно в x64 компилировать и новый стандарт языка поддерживается.