哪個版本的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. cbegin()/ cend()vs constBegin()/ constEnd()
- 2. std :: initializer_list沒有cbegin()/ cend()
- 3. 爲什麼我不能將cend()和cbegin()傳遞給count_if?
- 4. 在C++中支持`std :: cbegin()`14
- 5. 對於基於循環的範圍,cbegin/cend不夠嗎?
- 6. 迫使/ CEND()使用CBEGIN()的範圍爲基礎的
- 7. 爲什麼Netbeans不認識`cbegin()`,`cend()`,`unordered_set`等C++特性?
- 8. gcc支持boost :: unordered_map
- 9. AVR-GCC支持ATXMega16a4u
- 10. 在linux和gcc中支持16位wchar_t
- 11. gcc還支持sjlj嗎?
- 12. GCC是否支持C++ AMP
- 13. gcc 4.3.4是否支持unique_ptr?
- 14. gcc是否支持unique_locks?
- 15. 支持iOS6和iOS7的最佳方法?
- 16. stepUp和stepDown方法支持的測試
- 17. IzPack支持:Jar文件和TAR方法
- 18. 支持方法和他們的目標
- 19. 對象不支持方法
- 20. 蜂巢方法不支持
- 21. Enumerable.Any方法不支持
- 22. 不支持wget http方法
- 23. Gremlin綁定方法支持
- 24. MethodOverride - 「方法不支持」?
- 25. 不支持方法'POST'405
- 26. 不支持「等於」方法
- 27. 不支持的方法:GradleProject.getBuildScript()
- 28. 列表支持的方法
- 29. 不支持的方法:BaseConfig.getApplicationIdSuffix()
- 30. 不支持ToString()方法
您是否在使用這些方法時遇到任何錯誤,或者他們的行爲不符合他們的方式? – 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