У меня есть некоторое устаревшее C, которое перебирает buffer_1
, выделенное с некоторой допустимой памятью. buffer_2
указывает на части buffer_1
, итерация движется случайным образом на 20 позиций вперед. Ниже приведен код:
char* buffer_1;
char* buffer_2;
size_t buffer_length;
buffer_length = 2000; // somerandom value
if (buffer_length > 0) {
buffer_1 = malloc(buffer_length);
for(buffer_2 = buffer_1; buffer_2 < buffer_1 + buffer_length; buffer_2 += 20) {
// Some random logic
}
}
Я хочу сделать приведенный выше код C ++ 11 совместимым, объявив buffer_1
и buffer_2
как std::vector<char>
s, как показано ниже.
std::vector<char> buffer_1;
std::vector<char> buffer_2;
Тогда я думаю, что мне нужно использовать итератор над buffer_1
сделать что-то вроде ниже?
if (buffer_length > 0) {
buffer_1.reserve(buffer_length);
for(std::vector<char>::iterator it = buffer_1.begin(); it != buffer_1.end(); it += 20) {
buffer_2.data() = *it;
}
}
Является ли вышеуказанный способ итерации по std::vector<char>
правильным? Делает ли он именно то, что делает следующий оператор for?
for(buffer_2 = buffer_1; buffer_2 < buffer_1 + buffer_length; buffer_2 += 20)