Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
hiphone
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
#1

Foreach - C++

11.04.2014, 16:52. Просмотров 1300. Ответов 11
Метки нет (Все метки)

Здравствуйте, подскажите как написать свой цикл foreach?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2014, 16:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Foreach (C++):

Отличие итератора от foreach
Есть ли разница между циклами? std::vector<int> vec; vec.push_back(4);...

Foreach цикл и потоки
Список можно читать так: for(auto&pos:list) //bla-bla-bla Поток можно...

Скорость перебор вектора while/for/foreach
В php foreach для массива работает в 2 раза быстрее, чем перебор того же...

Класс-функтор с использованием foreach и transform
Добрый вечер господа, Не считает правильно сумму. Выдает феерично большое...

tuple foreach
Взял за основу вот это ...

реализация foreach в C++, другой синтсксис
нашел тут некоторое собрание библиотек на буст орг, там есть такая что содержет...

11
Alex566
241 / 153 / 47
Регистрация: 03.04.2013
Сообщений: 317
11.04.2014, 16:56 #2
В каком смысле свой?
C++
1
2
3
4
5
    int arr[10];
    for each (int &n in arr)
        n = 1;
    for each (int n in arr)
        std::cout << n << std::endl;
0
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.04.2014, 16:58 #3
Думаю, по аналоге с этим:
C++
1
2
3
4
5
6
7
8
template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
{
    for (; first != last; ++first) {
        f(*first);
    }
    return f;
}
0
hiphone
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
11.04.2014, 16:59  [ТС] #4
ну в стандартном for_each там

for_each(InputIterator first, InputIterator last, Function fn)

а меня такое не устраивает

хочу сделать вида foreach(char с in str)
0
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
11.04.2014, 17:02 #5
Пусть а - контейнер, со всеми членами которого нужно произвести некоторое действие, то
C++
1
2
3
4
for(auto i: a)
{
    // тут некоторые действия с i...
}
0
Alex566
241 / 153 / 47
Регистрация: 03.04.2013
Сообщений: 317
11.04.2014, 17:04 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class tp ,class fn>
void foreach(tp *begin, tp *end,fn fun)
{
    for (; begin != end; begin++)
        fun(*begin);
}
 
int main()
{
    int arr[10];
    foreach(std::begin(arr), std::end(arr), [](int &n){ n = 3; });
    foreach(std::begin(arr), std::end(arr), [](int n){ std::cout << n << std::endl; });
    system("pause");
}
0
0x10
2554 / 1734 / 285
Регистрация: 24.11.2012
Сообщений: 4,361
11.04.2014, 17:04 #7
Не надо извращаться. Нормальный foreach есть в С++11.
Если нельзя пользоваться 11м стандартом, можно использовать BOOST_FOREACH.
Если все-таки хочется задолбаться, то в этой теме я старался подробно расписать на примере написание такого макроса в несколько упрощенном виде: http://www.cyberforum.ru/cpp-beginners/thread1090337.html
0
Avazart
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,074
Записей в блоге: 17
11.04.2014, 20:18 #8
Цитата Сообщение от 0x10 Посмотреть сообщение
Нормальный foreach есть в С++11.
for может ? cм пост CheshireCat.

Цитата Сообщение от 0x10 Посмотреть сообщение
Если нельзя пользоваться 11м стандартом, можно использовать BOOST_FOREACH.
Кстати в Qt, тоже есть foreach
0
0x10
11.04.2014, 20:26
  #9

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
for может ?
Естественно. Обозвал его так следом за заголовком темы.

0
hiphone
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
11.04.2014, 20:51  [ТС] #10
Цитата Сообщение от Avazart Посмотреть сообщение
for может ? cм пост CheshireCat.
к сожалению, в XE5 при попытке компиляции такого кода ошибка
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
11.04.2014, 22:01 #11
Цитата Сообщение от hiphone Посмотреть сообщение
хочу сделать вида foreach(char с in str)
Что, прямо в таком формате чтобы было? И зачем оно надо? Какая цель преследуется?
0
Avazart
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,074
Записей в блоге: 17
11.04.2014, 22:16 #12
В XE5 нет поддержки нового стандарта, зато должен работать BOOST_FOREACH (В XE3 работает)

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH
 
// ...
std::vector<myclass>v(10);
foreach( myclass& m, v)
{
   // ...
}
0
11.04.2014, 22:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2014, 22:16
Привет! Вот еще темы с решениями:

О "нестабильности" или "переполнении" цикла foreach
Здравствуйте, коллеги. Недавно коллега-программист сообщил мне страшную вещь:...

Обработка XML. Цикл foreach (XmlNode.) вложенный во внешний foreach
Здравствуйте. Возникла проблема при обработке XML-файла (с помощью...

Ошибка в foreach: foreach statement cannot operate on variables of type 'System.Collections.IEnumerator'
using System; using System.Collections; namespace P { class Program ...

Нужен простой пример из Foreach в Parallel.Foreach
Покажите любой простой пример из Foreach в Parallel.Foreach. Не могу до конца...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru