Аналогично реализации ответа @ ari, я хочу сказать, что решение для повышения уже существует, boost::array
решение вашей проблемы:
boost::array<char, 8> f() {
boost::array<char, 8> bin;
for(int i = 7; i >= 0; i--) {
int ascii = 'a';
if(2 ^ i-ascii >= 0) {
bin[i] = '1';
ascii = 2 ^ i-ascii;
} else {
bin[i] = '0';
}
}
}
...
boost::array<char, 8> a(f());
[Я не уверен, что вы хотите сделать с этим алгоритмом, но учтите, что я думаю, что вы хотите сделать 1 << i
(битовый сдвиг) вместо 2 ^ i
, что не возведение в степень в C ++.]
Boost-массив - это обычный массив, просто обернутый в структуру, так что вы не теряете производительности вообще. Он также будет доступен в следующей версии C ++ как std::array
, и его очень легко сделать самостоятельно, если вам не нужен добавляемый им begin()
/ size()
/ data()
(чтобы он был контейнером) , Просто выберите самый простой:
template<typename T, size_t S>
struct array {
T t[S];
T& operator[](ptrdiff_t i) { return t[i]; }
T const& operator[](ptrdiff_t i) const { return t[i]; }
};
Но, как обычно, используйте инструменты, уже написанные другими людьми, в данном случае boost::array
. Он также имеет преимущество в качестве агрегата (поэтому у него нет объявленного пользователем конструктора), поэтому он позволяет инициализироваться с помощью заключенного в скобки списка:
boost::array<int, 4> a = {{ 1, 2, 3, 4 }};