免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2093 | 回复: 10
打印 上一主题 下一主题

这句STL语句错在哪? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-12 23:44 |只看该作者 |倒序浏览
我写了一段程序,错误指在这一句,不知道错在哪?
stringIter = stringSet.end()-stringSet.size()/2000;

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-12-13 00:06 |只看该作者
报什么错误?
遇到问题应该把问题描述清楚,
而不是扔下一句代码。
这样叶妨碍别人帮助你。

论坛徽章:
0
3 [报告]
发表于 2005-12-13 00:14 |只看该作者
相关代码:

set<string>::iterator stringIter;
      
      stringIter = stringSet.end()-stringSet.size()/2000;
      while (stringIter != stringSet.end())
         {
         strcpy(buffer, (*stringIter).c_str());  //复制原数据到缓冲区
         stringSet1.insert(buffer);
          stringIter++ ;
         }
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

错误提示:
--------------------Configuration: QGJ1000X28RS10 - Win32 Debug--------------------
Compiling...
QGJ1000X28RS10Dlg.cpp
D:\Program Files\Microsoft Visual Studio\MyProjects\QGJ1000X28RS10\QGJ1000X28RS10Dlg.cpp(24 : error C2676: binary '-' : 'class std::_Tree<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_stri
ng<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::set<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,struct std::less<class std::basic_string<char,struct std::char_traits<char>,cl
ass std::allocator<char> > >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::_Kfn,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char
> > >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
Error executing cl.exe.

QGJ1000X28RS10.exe - 1 error(s), 0 warning(s)

论坛徽章:
0
4 [报告]
发表于 2005-12-13 00:24 |只看该作者
不明白你的这一句:  stringIter = stringSet.end()-stringSet.size()/2000;
是什么意思,stringIter是string类型的指针,不知道你这么做是为什么?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-12-13 00:29 |只看该作者
很久不弄,忘的差不多了。
stringSet.end()这样的不能做减法的吧?
你仔细看看书。

论坛徽章:
0
6 [报告]
发表于 2005-12-13 00:34 |只看该作者
为什么这句没有错误

stringIter = stringList.end()-stringList.size()/2000;

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-12-13 00:44 |只看该作者
原帖由 王二蛋 于 2005-12-13 00:34 发表
为什么这句没有错误

stringIter = stringList.end()-stringList.size()/2000;

建议你仔细弄明白你所用的数据结构,
它们的实现原理,否则很麻烦的。
有一本讲c++的STL库的书不错,可以找来看看。
书名是《c++标准模板库》。

论坛徽章:
0
8 [报告]
发表于 2005-12-13 09:39 |只看该作者
如果想要对 iterator 进行加减法运算,其前提条件是这个 iterator 必须是一个随机访问(random access)的 iterator。在标准容器中,vector、deque、string 的 iterator 是随机访问 iterator,而其它的容器,如 list、set、map 等的 iterator 不是随机访问的 iterator,对于这些容器中元素的访问只能顺序进行,不能随机访问。

一个容易记忆的特征就是:对于能够随机访问的容器类,都重载了 [] 运算符供随机访问使用。容器内没有提供 [] 运算符重载的都不能进行随机访问。

论坛徽章:
0
9 [报告]
发表于 2005-12-13 10:11 |只看该作者
谢谢各位

论坛徽章:
0
10 [报告]
发表于 2005-12-13 11:43 |只看该作者
一个容易记忆的特征就是:对于能够随机访问的容器类,都重载了 [] 运算符供随机访问使用。容器内没有提供 [] 运算符重载的都不能进行随机访问。

很可惜,std::map 恰好是一个反例:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP