【发布时间】:2016-04-26 20:53:20
【问题描述】:
我有这个代码:
// Example program
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> test_vector;
std::vector<int>::iterator v;
int test = 1;
int sum = 0;
for (int i = 0; i < 10; i++) {
test = test * 2;
test_vector.push_back(test);
}
for (v = test_vector.begin(); v < test_vector.end(); v++) {
std::cout << *v << " ";
}
std::cout << std::endl;
std::reverse(test_vector.begin(), test_vector.end());
for (v = test_vector.begin(); v < test_vector.end(); v++) {
std::cout << *v << " ";
}
std::cout << std::endl;
for (v = test_vector.begin(); v < test_vector.end(); ++v) {
sum = sum + test_vector[*v];
std::cout << sum << " ";
}
return 0;
}
这很简单,我有一个向量,用一些元素填充它,而不是反向并最终尝试添加所有元素。
输出是这样的:
2 4 8 16 32 64 128 256 512 1024
1024 512 256 128 64 32 16 8 4 2
0 0 0 0 0 0 0 4 68 324
问题是:在sum 所在的最后一个循环中我做错了什么?
我希望它是 1024 + 512 + 256 之类的东西;
【问题讨论】:
-
test_vector[*iterator];是一个很大的代码味道 -
你拥有的是UB,你应该拥有
sum = sum + *v;而不是sum = sum + test_vector[*v]; -
迭代器不是索引。