哪个版本的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