Что такое "для (x: y)"? -- c++ пол Связанный проблема

What is “for (x : y)”?


5
vote

проблема

русский

Итак, я оглянулся на межпубки о нитках, и я пришел в блог / учебную вещь о нитках, но то, что меня смущено, была эта линия, которую он использовал

 <код> for (auto& thread : threads)     

Не совсем уверен, что это делает
Вот ссылка на блог, о которой я говорю о Ссылка
Благодаря тому, кто отвечает на этот вопрос для меня
PS Вы также можете дать мне ссылку, поэтому я могу прочитать, что это делает и другие связанные вещи, которые я, кажется, слепой при поиске одного

Английский оригинал

So i was looking around on the interwebs about threads and i came to a blog/tutorial thing about threads but what confused me was this line that he used

for (auto& thread : threads)   

not really sure what that does
Here is a link to the blog i'm talking about LINK
Thanks to whoever answers this question for me
PS can you also give me a reference so i can read up on what that does and other related things I seem to be blind when searching for one

</div
  
         
         

Список ответов

12
 
vote

C ++ 11 представил новое утверждение итерации, так называемое на основе диапазона for loop . Он отличается от обычного for Loop в том, что он только дает вам доступ к членам диапазона, не требуя вас назвать самого дальности прямо и без использования объектов прокси-итератора. В частности, вы не должны мутировать диапазон во время итерации, поэтому этот новый цикл документирует намерение «смотреть на каждую элемент диапазона» и не делать ничего сложного с самим диапазоном.

Синтаксис это: <код> for (decl x : r) { /* body */ } , где <код> String0 обозначает некоторую декларацию и <код> String1 - произвольное выражение. Это функционально в основном эквивалентно следующей традиционной петле:

 <код> String2  

в качестве особого случая, массивы и установленные списки также поддерживаются в родом.

 

C++11 introduced a new iteration statement, the so-called range-based for loop. It differs from the ordinary for loop in that it only gives you access to the members of a range, without requiring you to name the range itself explicitly and without using proxy iterator objects. Specifically, you are not supposed to mutate the range during the iteration, so this new loop documents the intent to "look at each range element" and not do anything complicated with the range itself.

The syntax is this: for (decl x : r) { /* body */ }, where decl stands for some declaration and r is an arbitrary expression. This is functionally mostly equivalent to the following traditional loop:

{     auto && __r = r;      using std::begin;     using std::end;      for (auto __it = begin(__r), __e = end(__r); __it != __e; ++__it)     {         decl x = *it;         /* body */     } } 

As a special case, arrays and braced lists are also supported natively.

</div
 
 
       
       
2
 
vote

Это цикл на основе диапазона C ++ 11, требующий выражения дальнего действия, которое может быть:

    .
  • массив или
  • Списки включены в списки
  • класс, имеющий либо
      .
    • Функции участника <код> String3 и <код> String4 или
    • Доступны бесплатные функции <код> String5 и <код> String6 (через ADL)

Это

 <код> String7  

расширяется до

 <код> String8  

Откуда begin_expr и end_expr получены с помощью инспекции массива или <код> String9 / <код> int0 пара. ( int1 может быть выписки на выпуске в фигурных скобках.)

 

It is a C++11 range-based loop, requiring a ranged expression which may be:

  • an array or
  • braced lists
  • a class having either
    • Member functions begin() and end() or
    • available free functions begin() and end() (via ADL)

This

for ( for_range_declaration : expression ) statement; 

expands to

range_init = (expression) {   auto && __range = range_init;   for ( auto __begin = begin_expr,   __end = end_expr;   __begin != __end;   ++__begin ) {     for_range_declaration = *__begin;     statement;   } } 

Where begin_expr and end_expr are obtained via array inspection or begin() / end() pair. (The statement may be a compund statement in curly braces.)

</div
 
 

Связанный проблема

1  Не можете получить программу Math C ++ для работы [дубликата]  ( Cant get math c program to work ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

1  C ++ - утечка памяти, вызванная использованием размещения New Over * этот указатель?  ( C memory leak caused by using placement new over this pointer ) 
Как известно, размещение New просто строит объект без выделения любой памяти. Также все члены в классе <Код> 5.5.10 являются объектами вместо указателей, хот...

1  Почему 64-битное целое расширение C ++ называется «долгим долгом»?  ( Why is the 64bit integer extension of c called long long ) 
В отличие от других типов: «int», "логический", "двойной" и т. Д. И даже таможенные классы, есть только одно слово. Однако только одно слово для их типа тольк...

2  ODBC и NLS_LANG  ( Odbc and nls lang ) 
Допустим, я создал две разные исполняемые файлы программы, например, в C ++. По какой-то причине две программы внутреннее представление текста отличаются др...

0  Использование аргументов Makefile без Foo =  ( Using makefile arguments without foo ) 
У меня есть makefile, который я использую для компиляции одного файла. Когда мне нужно пройти аргумент, я использую цель = TargetFile. Сценарий принимает ар...

-1  Мусор с указателями в классе, C ++  ( Garbage with pointers in a class c ) 
Я использую Borland Builder C ++. У меня есть утечка памяти, и я знаю, что это должно быть из-за этого класса, который я создал, но я не уверен, как это испра...

0  Libusb_Bulk_Transfer добавляет CRC?  ( Does libusb bulk transfer add crc ) 
Я пишу программу пользовательского интерфейса для устройства USB в C ++, используя Visual Studio 2019. Я использую библиотеку Libusb. Я хочу сделать объемную ...

4  Преобразовать фильм в Openni * .oni видео  ( Convert movie to openni oni video ) 
the библиотека Kinect Openni использует пользовательский формат видеофайла для хранения видеороликов, которые содержат информацию RGB + D. Эти видео имеют р...

1  STD :: CIN непосредственно к функции  ( Stdcin directly to a function ) 
Недавно я наткнулся на следующую часть кода. Я не знаю, имеет ли это какой-либо смысл, я просто пытаюсь его понять: <код> object Gender extends Enumeration ...

0  Проблема дизайна - создание шрифта Global (C ++, Marmalade)  ( Design issue making a font global c marmalade ) 
У меня есть проект Marmalade C ++, где встроенный в шрифте не масштабируется на экран. Чтобы справиться с этим вопросом, я делаю пользовательский шрифт, котор...

0  Как получить несколько наборов результатов с Poco :: Data?  ( How to fetch multiple result sets with pocodata ) 
Я прочитал Poco :: Руководство пользователя данных и упоминается, что Библиотека имеет поддержку нескольких наборов результатов. Существует пример для этой ...

0  Ошибка: аргумент типа "void (opca_hello ::) ()" не соответствует "void * (*) (void *)"  ( Error argument of type void opca hello does not match void void ) 
Я написал очень простой код для резьбы. Поскольку я очень новый для этого, я понятия не имею об ошибке. <код> class opca_hello { public: void hello(); } v...

-1  Неожиданный идентификатор ошибки - не уверен, почему (C ++)  ( Unexpected error id not sure why c ) 
IM Реализация программы C ++, по соображениям проекта оно должно быть включено в один файл, поэтому я не могу поставить то, что вы обычно в отдельном файле за...

2  Новый DataType, который может иметь количество до 100 цифр  ( New datatype which can have numbers upto 100 digits ) 
Примечание. Это был вопрос интервью и может не иметь фактического случая использования в настоящее время Вопрос должен был разработать класс, который может ...

0  Проблемы с повышением :: ptr_vector и Boost :: любой  ( Problems with boostptr vector and boostany ) 
Хорошо, так что я сомневался, я хочу знать, если это возможно: Я использую базу данных, с общими данными (строки, ints, bools и т. Д.). Всякий раз, когда об...