Я занимаюсь кодированием при работе на C++, и многое из того, что я работаю, связано с анализом наборов данных. Очень часто мне нужно выбрать некоторые элементы из STL контейнера, и очень часто я написал такой код:SQL-Like Selects in Imperative Languages
using std::vector;
vector<int> numbers;
for (int i = -10; i <= 10; ++i) {
numbers.push_back(i);
}
vector<int> positive_numbers;
for (vector<int>::const_iterator it = numbers.begin(), end = numbers.end();
it != end; ++it
) {
if (number > 0) {
positive_numbers.push_back(*it);
}
}
Со временем это цикл и логики, содержащейся в нем становится намного более сложным и нечитаемым. Код, как это меньше удовлетворения, чем аналогичная ЗЕЬЕСТ в SQL, при условии, что у меня есть таблица под названием номера с колонкой с именем «номер», а не станд :: вектор < Int>:
SELECT * INTO positive_numbers FROM numbers WHERE num > 0
Это много более читаемый для меня, а также масштабируется лучше, со временем большая логика if-statement, которая находится в нашей кодовой базе, стала сложной, зависящей от заказов и не поддающейся контролю. Если бы мы могли делать SQL-подобные инструкции на C++ без необходимости обращаться к базе данных, я думаю, что состояние кода может быть лучше.
Есть ли более простой способ реализовать что-то вроде инструкции SELECT в C++, где я могу создать новый контейнер объектов, только описывая характеристики объектов, которые я хочу? Я все еще относительно новичок в C++, поэтому я надеюсь, что есть что-то волшебное с метапрограммированием шаблонов или умными итераторами, которые разрешат это. Благодаря!
Редактировать на основе первых двух ответов. Спасибо, я понятия не имел, что на самом деле LINQ. Я программирую в основном на Linux и OSX-системах, и меня интересует нечто кросс-платформенное в OSX, Linux и Windows. Таким образом, более образованная версия этого вопроса будет - есть ли кросс-платформенная реализация чего-то типа LINQ для C++?
Спасибо jalf. Я искал что-то волшебное, которое уже было реализовано для этого, но я, скорее всего, попробую ваше предложение с помощью итераторов и фильтров. –