Ссылка в цикле в C++
При обходе вектора циклом изменение переменной элемента не приводит к изменениям самого вектора. В переменную попадает копия элемента. Запишем цикл и выведем первый элемент:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int num : vec) {
num += 1;
}
std::cout << vec[0] << "\n"; // выведет 1
return 0;
}
Нужного эффекта можно добиться, если объявить переменную цикла ссылкой. Запись в нее меняет элемент вектора. Запишем тот же цикл со ссылкой:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int& num : vec) {
num += 1;
}
std::cout << vec[0] << "\n"; // выведет 2
return 0;
}
Исправьте код так, чтобы элементы вектора изменились.
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {6, 7, 8};
for (int num : vec) {
num = num * num;
}
std::cout << vec[0] << "\n";
return 0;
}
Исправьте код так, чтобы элементы вектора изменились.
#include <iostream>
#include <vector>
#include <string>
int main() {
std::vector<std::string> vec = {"a", "b", "c"};
for (std::string item : vec) {
item += "!";
}
std::cout << vec[0] << "\n";
return 0;
}