C++/loops/for each, in

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

for each, in выполняет итерацию по массиву или коллекции.

Это нестандартное ключ. слово, доступно как в C++/CLI, так и в собственных проектах C++. Однако его использование не рекомендуется. Вместо этого рекомендуется использовать стандартный основанный на диапазоне оператор for.

Синтаксис

for each (object var in collection_to_loop) {}
for each ( идентификатор типа в выражении ) {
	инструкции
}

Параметры

type
Тип параметра identifier.
identifier
Переменная итерации, представляющая элемент коллекции. Если identifier является оператором отслеживаемой ссылки, можно изменить элемент.
expression
Выражение массива или коллекция. Элемент коллекции должен быть таким, чтобы компилятор мог преобразовать его в тип identifier.
инструкции
Один или несколько операторов для выполнения.

Ремарки

Оператор for each используется для итерации по коллекции. Можно изменять элементы в коллекции, но нельзя добавлять или удалять элементы.

Инструкции выполняются для каждого элемента в массиве или коллекции. После завершения итерации всех элементов коллекции управление передается следующему оператору после блока for each.

for each и in являются контекстно-зависимыми ключевыми словами.

Среда выполнения Windows

Требования

  • Параметр компилятора: /ZW

Примеры

Использование for each для итерации по строке:

// for_each_string1.cpp
// compile with: /ZW
#include <stdio.h>
using namespace Platform;

ref struct MyClass {
	property String* MyStringProperty;
};

int main() {
	String* MyString = ref new String("abcd");

	for each ( char c in MyString )
		wprintf("%c", c);

	wprintf("/n");

	MyClass* x = ref new MyClass();
	x->MyStringProperty = "Testing";

	for each( char c in x->MyStringProperty )
		wprintf("%c", c);
}

Вывод:

abcd
Testing

Среда CLR

Ремарки

Синтаксис среды CLR аналогичен синтаксису всех сред выполнения, за исключением след.:

expression
Выражение управляемого массива или коллекция. Элемент коллекции должен быть таким, чтобы компилятор мог преобразовать его из Object в тип идентификатора.

Результатом вычисления выражения является тип, который реализует IEnumerable, IEnumerable<T> или тип, определяющий GetEnumerator метод, который либо возвращает тип, который реализует, либо IEnumerator объявляет все методы, определенные в IEnumerator.

Требования

  • Параметр компилятора: /clr

Примеры

Использование for each для итерации по строке:

// for_each_string2.cpp
// compile with: /clr
using namespace System;

ref struct MyClass {
   property String * MyStringProperty;
};

int main() {
   String * MyString = gcnew String("abcd");

   for each ( Char c in MyString )
      Console::Write(c);

   Console::WriteLine();

   MyClass * x = gcnew MyClass();
   x->MyStringProperty = "Testing";

   for each( Char c in x->MyStringProperty )
      Console::Write(c);
}

Вывод:

abcd
Testing