Я пытаюсь использовать ссылочные оболочки в C ++, так как я хочу иметь возможность напрямую изменять значения объектов, но все их значения неверны. Вот пример, который демонстрирует эту проблему:
#include <vector>
#include <functional>
#include <iostream>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3};
for (int i : v1) {
cout << i << " ";
}
cout << endl;
vector<reference_wrapper<int>> v2;
for (int i : v1) {
v2.push_back(i);
}
for (int i : v2) {
cout << i << " ";
}
}
Он печатает
1 2 3
3 3 3
Я не уверен, почему опорный вектор-обертка v2
не копирует указанные значения в v1
...
РЕДАКТИРОВАТЬ: Вот еще один пример, который также таинственно не работает. Я не думаю, что в этом есть какие-либо свисающие ссылки.
#include <vector>
#include <functional>
#include <iostream>
using namespace std;
int main() {
vector<int> v1;
vector<reference_wrapper<int>> v2;
for (int i = 0; i < 3; i++) {
v1.push_back(i);
v2.push_back(v1[i]);
}
for (int i : v2) {
cout << i << " ";
}
}
Он печатает 9596312 1 2
, в то время как я ожидаю, что он напечатает 0 1 2
...