【发布时间】:2020-03-09 21:49:34
【问题描述】:
我有一些旧版 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>s 来使上述代码符合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)
【问题讨论】:
-
叹息...
for(auto it = begin(begin(buffer_1)); it < end(buffer_1); it += 20) {. -
它的
begin(buffer_1)´ and notbegin(begin(buffer_1))`。但我明白了。对不起:-(
标签: c++11 iterator char stdvector