【发布时间】:2015-04-27 22:10:46
【问题描述】:
我正在尝试迭代一个向量,保留上一次迭代的值的副本。令我惊讶的是,我的 prev 指针最终指向循环的当前值。
#include <iostream>
#include <vector>
int main() {
std::vector<std::string> v;
v.push_back("one");
v.push_back("two");
v.push_back("three");
std::string *prev = nullptr;
for (std::string s : v) {
std::cout << "s: " << s << std::endl;
if (prev == nullptr) {
std::cout << "prev: (null)" << std::endl << std::endl;
} else {
std::cout << "prev: " << *prev << std::endl << std::endl;
}
prev = &s;
}
std::cout << "final prev: " << *prev << std::endl;
}
这是输出:
s: one
prev: (null)
s: two
prev: two
s: three
prev: three
final prev: three
这是为什么?什么是修复它的正确方法?
【问题讨论】:
-
快速修复:通过引用传递字符串似乎可以做到。