我正在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