遍历std :: vector <char>

时间:2020-03-09 21:49:34

标签: c++11 iterator char stdvector

我有一些旧的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_1buffer_2std::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)

1 个答案:

答案 0 :(得分:1)

我想使以上代码与C ++ 11兼容

该代码已经是有效的C ++ 11。

以上遍历std :: vector的方法正确吗?它是否完全符合以下for语句的作用?

不,不:

  • 您需要使用resize而不是reserve
  • 如果缓冲区的大小不是20的倍数,它将不起作用。
  • 这个buffer_2.data() = *it;毫无意义,因为data()只是一个指向内部缓冲区的指针。