我正在C++中进行一些编码工作,而我所从事的许多工作都涉及分析数据集。很多时候我需要选择从STL容器的一些元素,很频繁,我写这样的代码:类似于SQL的语法选择命令式语言
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);
}
}
随着时间的推移for循环和它所包含的逻辑得到了很多更加复杂和不可读。这样的代码比SQL类似的SELECT语句不太令人满意,假设我有一个表叫号与名为“民”,而不是一个std向量列:: < INT>:
SELECT * INTO positive_numbers FROM numbers WHERE num > 0
这是一个很大对我来说更具可读性,并且随着时间的推移还可以更好地扩展,我们代码库中的很多if语句逻辑变得复杂,依赖于顺序并且不可维护。如果我们可以在C++中执行类似SQL的语句而不必访问数据库,那么我认为代码的状态可能会更好。
有没有更简单的方法,我可以在C++中实现类似于SELECT语句的东西,我可以通过仅描述所需对象的特性来创建新的对象容器?我对C++还比较陌生,所以我希望能够通过模板元编程或巧妙的迭代器来解决这个问题。谢谢!
根据前两个答案编辑。谢谢,我不知道这是LINQ的实际情况。我主要在Linux和OSX系统上编程,并且对跨OSX,Linux和Windows的跨平台感兴趣。因此,这个问题更受教育的版本是 - 是否有跨平台的实现类似LINQ for C++?
谢谢贾尔夫。我一直在寻找已经实现的神奇功能,但我可能会尝试使用迭代器和过滤器的建议。 – 2009-07-02 00:04:40