vector::iterator 也可以用作向量吗
Can a vector::iterator also function as a vector
所以我试图将二进制文件加载到 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';
我已经研究过这个话题,但我还没有找到答案。
标准 class 模板 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
所以我试图将二进制文件加载到 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';
我已经研究过这个话题,但我还没有找到答案。
标准 class 模板 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