c++ - 无法使用迭代器更改 vector 元素

标签 c++ vector iterator

代码:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
using std::vector;

int main(){ 
vector<float> test;
test.push_back(0.5);
test.push_back(1.1);
test.push_back(0.9);
vector<float>::iterator maxval = max_element(test.begin(), test.end());
vector<float>::iterator it;
for (it = test.begin(); it != test.end(); ++it)
    *it = (*it)/(*maxval);
for (it = test.begin(); it != test.end(); ++it)
    cout << *it << endl;
return 0; }

问题:

最后一个元素(或通常所有超过 maxval 迭代器指向的元素并包括该元素的 vector 元素)不会改变。为什么 maxval 迭代器保护后续 vector 元素不被修改?

最佳答案

因为 maxval 指向 test[1] 并且一旦计算出 0.9/*maxval*maxval 实际上是 1.0 ,这样test[2]保持不变。

您可以将 maxval 值复制到本地 float 变量,以更改最后一个元素:

float fmaxval = *maxval;

及以下:

for (it = test.begin(); it != test.end(); ++it)
    *it = (*it)/fmaxval;

关于c++ - 无法使用迭代器更改 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136009/

相关文章:

javascript - 不会在 jQuery 中遍历数组

c# - 创建 C# 到 C++ 桥 : Why do I get a AccessViolationException when calling DLL?

c++ - 线程不起作用并出现错误:启用多线程以使用 std::thread:不允许操作

c++ - 如何将 vector 的 C++ vector 传递给 OpenCL 内核?

java - 两个 3D vector 之间的角度

c++ - 增加迭代器标准映射

c++ - 删除此架构和未定义的行为

c++ - 在编译时填充 std::set?

c++ - 将结构体 vector 插入集合时出现错误 2676 和 2784(...无法推断...的模板参数)

c++ - C++ 中的通用模板