哪個版本的gcc編譯器支持容器的免費const_iterator
方法,例如:cbegin
,cend
,crbegin
,crend
。我使用gcc 4.6.1,通過-std=c++0x
標誌啓用C++ 0x功能,但這些方法無法在我的代碼中解析。gcc支持cbegin和cend方法
回答
不幸的是,標準中沒有免費功能cbegin
/cend
,也沒有任何反向版本。您可以隨時使用鑄造,雖然得到不斷的迭代器:
auto it = std::begin(static_cast<T const &>(x));
從<type_traits>
使用std::add_const
你甚至應該能夠拼湊的東西相當普遍的,如果你需要這個有很多。
的容器成員函數cbegin
/crbegin
等是C++ 11的所有部分,並且GCC一直支持那些一段時間;很可能從4.3開始(當C++ 11支持首次開始時)。 GCC 4.6絕對支持這些;如果遇到問題,請發佈麻煩的代碼。
對我的作品(GCC 4.6.0):
#include <vector>
int main() {
std::vector<int> vec;
auto it = vec.cbegin();
// int& val = *it; // gives compiler error, as expected
}
成員函數也存在於stl_vector.h
。
我已經在fedora 15 x86_x64中安裝了gcc 4.6.1,並且使用了eclipse IDE 1.4.1我用-std = C++ 0x標誌爲IDE的C++ Builder,並得到錯誤「Method'cbegin'could not be resolved」for上面的代碼,所以我有什麼錯我不明白。 – AMCoded 2012-02-20 15:49:17
@AMCoded:您可以嘗試從命令行構建以查看它是否與您的Eclipse配置或GCC安裝/配置有關? 'g ++ -std = C++ 0x foo.cpp' – 2012-02-20 18:03:26
是的,當然我已經試過在命令行中構建它們,但是我得到了同樣的錯誤,我可以使用除此之外的所有C++ 11功能,不知道什麼是問題。 – AMCoded 2012-02-21 07:39:28
你可以添加自己的?
template< class C >
auto cbegin(C& c) -> decltype(c.cbegin());
template< class C >
auto cbegin(const C& c) -> decltype(c.cbegin())
我正在尋找cbegin和ceind方法的continer類,它會解決我的問題。 – AMCoded 2012-02-20 15:52:06
啊,對不起。我知道該語言中缺少獨立版本的cbegin()和cend()。這會添加它,但如果容器不支持它,它不能解決問題。 – 2012-02-20 17:46:40
我的實驗顯示,通過默認的 「cbegin
」 無法使用(從像<vector>
<map>
STL容器)。除非您指定--std=c++0x
或--std=c++11
這是我在GCC 4.8 expriment:
如果你的編譯器不能支持這些--std
開關(像我在做一些跨平臺的工具鏈) ,你可能只使用類似:
for (std::vector<string>::const_iterator it = vec.begin(), ite = vec.end();
it != ite; ++it) {
/* ... ... */
}
這適用於那些沒有支持C++ 11的「汽車」關鍵字功能版本的GCC。
- 1. std :: initializer_list沒有cbegin()/ cend()
- 2. 迫使/ CEND()使用CBEGIN()的範圍爲基礎的
- 3. 對於基於循環的範圍,cbegin/cend不夠嗎?
- 4. gcc支持boost :: unordered_map
- 5. 在linux和gcc中支持16位wchar_t
- 6. GCC是否支持C++ AMP
- 7. gcc是否支持unique_locks?
- 8. gcc還支持sjlj嗎?
- 9. 支持方法和他們的目標
- 10. GAE HTTP方法支持
- 11. 對象不支持方法
- 12. 語言不支持「方法」
- 13. Gremlin綁定方法支持
- 14. 不支持的方法:BaseConfig.getApplicationIdSuffix()
- 15. 不支持ToString()方法
- 16. 不支持Xamarin PushAsync方法
- 17. 不支持「等於」方法
- 18. 不支持方法'POST'405
- 19. 單()方法不支持
- 20. 列表支持的方法
- 21. 哪個gcc和g ++版本支持c和C++的標準?
- 22. gcc爲什麼不支持裸函數?
- 23. gcc插件支持何時出現?
- 24. C++ 0x GCC支持iPhone的Lambda
- 25. GCC是否支持命令文件
- 26. CUDA 7.0抱怨不支持GCC 4.9
- 27. 不支持不使用停止()方法不支持的線程方法
- 28. 所有的gcc版本都支持gcc的@file選項嗎?
- 29. 方向支持
- 30. 不支持棄用的線程方法不支持
您是否在使用這些方法時遇到任何錯誤,或者他們的行爲不符合他們的方式? – vvnraman 2012-02-19 22:52:41
錯誤:「無法解決方法'cbegin'錯誤通過Eclipse IDE 1.4.1與-std = C++ 0x和gcc編譯器4.6.1上fedora 15 x86_x64 – AMCoded 2012-02-20 17:58:46
請發送一個完整的示例,請產生錯誤。我開始認爲你的錯誤在別處。 – 2012-02-21 09:11:39