Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
int sum = 0;
for(int i = 0; i < candles.size(); i++)
sum += candles[i].ClosePrice;foreach(var index in Enumerable.Range(3,456))
{
Console.WriteLine(index);
}
map — std::for_each
std::for_each не должен менять существующий контейнер, а должен возвращать новый. std::accumulate
filter.Неужто мне тебя учить? Ты же любишь Haskell, ты должен знать, что в контексте функционального программирования переменных нет — есть только константы. А значит, std::for_each не должен менять существующий контейнер, а должен возвращать новый.
Вообще не понятно к чему это ты приплел. Я за fold хоть что-то сказал? Я говорил за filter.
template <typename Container, typename InputIterator, typename UnaryPredicate>
Container filter(InputIterator _from, InputIterator _to, UnaryPredicate _pred)
{
Container collection;
return std::accumulate(_from, _to, collection,
[_pred] (Container acc, const InputIterator::value_type & val) -> Container
{
if (_pred(val))
acc.insert(std::end(acc), val);
return acc;
});
}
//////////////////////////////
// usage
std::vector<int> vec = {0, 1, 2, 3};
std::vector<int> newVec = filter<decltype(newVec)>(std::begin(vec), std::end(vec),
[] (int n)
{
return n % 2 == 0;
});
Если тебе хочется новый контейнер, то std::transform.
Неужто мне тебя учить? )) Фильтр же — это свёртка списка.
Фильтр же — это свёртка списка.
Признаюсь, мне всего два раза в жизни хотелось что-то подобное.
#pragma once, а он, к сожалению, не является стандартным. Поэтому, если хочется оставить преимущества последнего и не пренебрегать стандартом С++, лучше воспользоваться следующей конструкцией:#pragma once
#ifndef BOOLINQ_H_
#define BOOLINQ_H_
// paste boolinq code here
#endif // BOOLINQ_H_
pragma once якобы быстрее. Как я указал в комментарии выше — разработчики MS в своей STL юзают и pragma и include guard.struct S
{
int f1,f2;
};
vector<S> v;
int sum=std::accumulate(v.begin(),v.end(),S(),[](S x, S y){S t; t.f1=x.f1+y.f1; return t;}).f1;
int sum = 0;
for (Candle candle : vector)
sum += candle.ClosePrice;
for each(auto candle in vector)
sum += candle.ClosePrice;
for each(Candle candle in vector)
sum += candle.ClosePrice;
for each(Candle& candle in vector)
sum += candle.ClosePrice;
std::vector<int> numbers;
for(int i : numbers){
// blah blah
}
from(naturalNumbers).select(i % 2 == 0) // нет бесконечности
from(array).where(i > 0).any() // будет полный проход
LINQ to Objects на языке C++