Итак, моя цель - захватить данные в буфере. Мне нужна скорость, и мне нужен только фиксированный размер, поэтому я думал, что круговой массив будет лучшим.взять массив из круглой матрицы
Но то, что я хочу сделать, это на каждом шагу к:
- первый, перезаписать самую последнюю информацию в массиве с новейшим, который только что прибыл
- дальше, используя весь массив, начиная с самых старых до последней
- повторе
мне трудно увидеть, как обрабатывать второй шаг в C++, будучи эффективным. Или может быть, что-то еще, чем круговой массив, было бы лучше? Любые рекомендации или точки зрения приветствуются.
Чтобы иметь что-то более графический:
for step in steps:
(current writing position = 2)
current buffer = [8, 9, 3, 4, 5, 6, 7]
new info = 10
overwrite buffer(new info)
new buffer = [8, 9, 10, 4, 5, 6, 7]
current writing position += 1 //(3)
array to use = [4, 5, 6, 7, 8, 9, 10]
function(array to use)
(я использовал число следующих друг за другом, чтобы увидеть хронологию каждой информации в буфере)
То, что я имею в виду, чтобы скопировать последнюю часть и первую часть, а затем объединить их:
std::vector<int> buffer{8, 9, 10, 4, 5, 6, 7};
std::vector<int> oldest(&buffer[3],&buffer[6]);
std::vector<int> youngest(&buffer[0],&buffer[2]);
oldest.insert(oldest.end(), youngest.begin(), youngest.end());
function(oldest)
Если вы знаете что-то, что было бы быстрее, сообщите мне.
Если кто-то подумает, что для понимания моей проблемы лучше изменить псевдокод с помощью C++, дайте мне знать. Я изменю его. Мой текущий код более сложный. – user1854186