c++ - vector::iterator也可以用作 vector 吗

标签 c++ vector iterator buffer

因此,我试图将二进制文件加载到Vector中,以便像缓冲区一样使用它。

ifstream binaryFile;
vector<unsigned char> fileBuffer(istreambuf_iterator<char>(binaryFile), {});
vector<unsigned char>::iterator fileIter = fileBuffer.begin();

现在我的问题是,如果我使用fileIter变量,是否可以访问fileBuffer vector 中的所有元素?
我想知道,因为我只需要在某些位置编辑fileBuffer的内容,这就是为什么我首先使用迭代器的原因。

简化了,我想知道是否可以编辑 vector fileBuffer中的元素,如果我用类似以下代码的fileIter编辑*(fileIter + 2) = 'a';
我已经研究了该主题,但尚未找到答案。

最佳答案

标准类模板std::vector具有随机访问迭代器。因此,您可以像使用指针一样使用它。例如

fileIter[10] = 'A';

要么
fileIter += 10;

等等。

这是一个演示程序。
#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> v = { 1, 2, 3, 4, 5 };

    for ( const auto &item : v ) std::cout << item << ' ';
    std::cout << '\n';

    auto it = v.begin();

    it[1] = -it[1];

    for ( const auto &item : v ) std::cout << item << ' ';
    std::cout << '\n';

    it += 2;

    *it *= 10;

    for ( const auto &item : v ) std::cout << item << ' ';
    std::cout << '\n';

    return 0;
}

它的输出是
1 2 3 4 5 
1 -2 3 4 5 
1 -2 30 4 5 

关于c++ - vector::iterator也可以用作 vector 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60649931/

相关文章:

c++ - 赋值后值可以改变吗?

c++ - 使用过多内存的文件解析 (C++)

c++ - 使用 std::ostream_iterator 写入二进制文件

c++ - 如何在 Linux 上注册/捕获终端内鼠标单击的位置?

c++ - 专门用于日志记录的 Functor

c++ - 如何从 C++ 中的 vector 中删除节点

Python 成对使用迭代器

c# - 获取枚举器 : return or yield return

return 语句中的 C++11 显式转换运算符/构造函数

python - 将正方形旋转为向量的法线