Advertisement
Guest User

range-based for

a guest
Feb 24th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.     vector<int> v(5);
  9.  
  10.     // Это "range-based for". Переменная слева от двоеточия принимает
  11.     // последовательно все значения из диапазона справа от двоеточия.
  12.     // В данном случае x имеет тип ссылки, потому что я хочу менять значения
  13.     // элементов внутри v, к которым через эту ссылку обращаюсь.
  14.     for (int& x : v) {
  15.         x = 7;
  16.     }
  17.     // Все пять элементов теперь равны 7.
  18.  
  19.     // Если не использовать ссылку, то будет копирование значения.
  20.     for (int x : v) {
  21.         cout << x << ' ';
  22.     }
  23.     cout << endl;
  24.  
  25.     // Можно использовать константную ссылку, чтобы копирования не было.
  26.     // Правила такие же, как при передачи аргумента в функцию
  27.     for (const int& x : v) {
  28.         cout << x << ' ';
  29.     }
  30.     cout << endl;
  31.  
  32.     // А вот пример того, что невозможно сделать с range-based for:
  33.     for (int i = 0; i < v.size(); ++i) {
  34.         v[i] = i + 7;
  35.     }
  36.     // Здесь нам нужен индекс i для вычислений, а range-based for
  37.     // не знает индекс элемента, с которым работает в своём теле.
  38.  
  39.     // Можно пройтись таким же образом по символам строки.
  40.     string s = "Hello";
  41.     for (const char& c : s) {
  42.         cout << c << endl;
  43.     }
  44.  
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement