Я хочу перебрать простой массив с использованием итераторов. Интересно, как я могу это сделать.Итерация по массиву с использованием итераторов
То, что я хотел бы иметь что-то вроде этого:
void foo(double* array, size_t size)
{
std::vector<double> real(size);
std::vector<double> imag(size);
auto arrBegin = std::begin(array); // this of course doesn't work
auto arrEnd = std::end(array); // this of course doesn't work
bool toggle = false;
std::partition_copy(arrBegin, arrEnd, std::begin(real), std::begin(imag),
[&toggle] (int) {return toggle != toggle});
//Do other stuff
}
Как некоторые из вас могли бы догадаться, массив является чередованием комплексное число, что я хотел бы разделить на массивы действительных и мнимых часть.
Есть ли способ сделать это, используя массив, который я получаю в качестве указателя, если я знаю размер массива, или мне нужно использовать отдельный класс, такой как std :: vector для массива, чтобы работать с итераторами?
Я был бы признателен за использование std :: partition_copy(), но я открыт для других идей.
Примечание: Я не могу использовать std :: array, потому что размер массива неизвестен во время компиляции. std :: vector был бы возможен, но я действительно хочу посмотреть, можно ли это сделать без std :: vector, поскольку я получаю массив из API и хочу использовать его как есть.
Вот почему вы должны использовать ['std :: array'] (http://en.cppreference.com/w/cpp/container/array). –
Обратите внимание, что ваши векторы недостаточно велики, чтобы удерживать диапазоны выходных данных. –
В случае несвязанной заметки, если у вас есть * размер * используйте 'size_t'. В 64-битной системе это, скорее всего, псевдоним 64-разрядного целочисленного типа без знака, как и 'uint64_t', но он передает более семантическую информацию читателю кода. –