我有一些旧的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
}
}
我想通过声明buffer_1
和buffer_2
为std::vector<char>
来使上面的代码符合C ++ 11,如下所示。
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)
答案 0 :(得分:1)
我想使以上代码与C ++ 11兼容
该代码已经是有效的C ++ 11。
以上遍历std :: vector的方法正确吗?它是否完全符合以下for语句的作用?
不,不:
resize
而不是reserve
。buffer_2.data() = *it;
毫无意义,因为data()
只是一个指向内部缓冲区的指针。