gpt4 book ai didi

C++ std::vector - 如何修改迭代器指定的元素?

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:01 27 4
gpt4 key购买 nike

我正在尝试更改 vector 的每个元素,但由于 const 的一些混淆,我的代码无法编译。这是一个大大简化的示例(我省略了 vector 的初始化):

std::vector<int> test;
for (auto iter = test.cbegin(); iter != test.cend(); ++iter)
{
int v = *iter; // gets the correct element
*iter = v * 2; // compile error
}

编译器错误是“'iter':你不能分配给一个常量变量”。如图所示,使用迭代器修改单个元素的正确方法是什么?

最佳答案

您特别要求编译器确保您不会使用cbegin()修改 vector 的内容。

如果你想修改它,使用非常量函数:

for(auto iter = test.begin(); iter != test.end(); ++iter)
{
int v = *iter; // gets the correct element
*iter = v * 2; // works
}

或使用基于范围的循环的上述循环的更短版本:

for(auto& v : test)
{
v *= 2;
}

不同类型的迭代器有区别:

std::vector<int>::const_iterator a // not allowed to modify the content, to which iterator is pointing
*a = 5; //not allowed
a++; //allowed

const std::vector<int>::iterator b //not allowed to modify the iterator itself (e.g. increment it), but allowed to modify the content it's pointing to
*b = 5; //allowed
b++; //not allowed

std::vector<int>::iterator c //allowed to both modify the iterator and the content it's pointing to
*c = 5; //allowed
c++; //allowed

关于C++ std::vector - 如何修改迭代器指定的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com