【问题标题】:Can a vector::iterator also function as a vectorvector::iterator 也可以用作向量吗
【发布时间】:2020-03-12 08:11:08
【问题描述】:

所以我试图将二进制文件加载到 Vector 中,这样我就可以像 Buffer 一样使用它。

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

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

简而言之,我想知道矢量fileBuffer 的内容是否会改变,根据对fileIter 所做的编辑,代码如下 *(fileIter + 2) = 'a';

我已经研究过这个话题,但我还没有找到答案。

【问题讨论】:

  • 听起来你希望通过修改向量来修改文件的内容,但是它们之间没有任何联系。
  • 您通过迭代器而不是文件修改fileBuffer(即向量)。
  • @molbdnilo 我想修改矢量,然后将矢量另存为新文件。
  • @youngtrashbag 我的意思是,您只会编辑矢量,而不是文件。向量是文件内容的副本。
  • @youngtrashbag 我认为您只需要这样做: 1. 将文件读入向量中。 2. 编辑向量的内容。 3. 将向量写入文件(或其他文件?)。

标签: c++ vector iterator buffer


【解决方案1】:

标准类模板 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 

【讨论】:

    猜你喜欢
    • 2015-08-23
    • 2020-10-30
    • 2016-11-26
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多