请教一个STL的问题,为什么包含不进来呢

sysabod 2009-01-16 10:00:55
请看源码
#include <iostream>
#include <deque>
using std::cout;
int main()
{
deque<char> container1;
deque<char>::iterator pointer;
container1[0]='a',container1[1]='b',container1[2]='c';
for(pointer=container1.begin();pointer!=container1.end();pointer++)
cout<<*pointer<<" ";
}

编译时说deque未定义,请问这是为什么呢,我可是照书上写的,不是已经包含了deque了吗?谢谢
...全文
240 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2009-01-17
  • 打赏
  • 举报
回复
买本好点的教材真有这么难么?
就呆在云上 2009-01-17
  • 打赏
  • 举报
回复

用得着这么多回复吗?
我就顶一下
chin_chen 2009-01-17
  • 打赏
  • 举报
回复
[code=c++][/code]
waizqfor 2009-01-16
  • 打赏
  • 举报
回复
呀 解决了 呵呵 LZ还有问题吗
deque <char> container1定义的时候没分配空间 兄弟
flydream1980 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xiaoyisnail 的回复:]
deque不是通过下标来添加元素的,要用push_back,如下:
[/Quote]

可以的。
#include <iostream>
#include <deque>
using namespace std;

int main ()
{
deque<int> mydeque (10); // 10 zero-initialized elements
unsigned int i;

deque<int>::size_type sz = mydeque.size();

// assign some values:
for (i=0; i<sz; i++) mydeque[i]=i;

// reverse order of elements using operator[]:
for (i=0; i<sz/2; i++)
{
int temp;
temp = mydeque[sz-1-i];
mydeque[sz-1-i]=mydeque[i];
mydeque[i]=temp;
}

cout << "mydeque contains:";
for (i=0; i<sz; i++)
cout << " " << mydeque[i];

cout << endl;

return 0;
}


想看有什么函数或操作,查查msdn或库函数手册
sysabod 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ayw215 的回复:]
引用 7 楼 sysabod 的回复:
谢谢大家了,编译通过了,可是一运行就出错,说是deque subscript out of range

原因在于你刚开始的时候容器为空
后来你直接用【】运算,这个运算的前提是容器有这么多的空间了,但事实不是这样的。
有两种方法可以修改,
1,指定容器大小:

C/C++ code
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<char> container1;
deque<char>…
[/Quote]谢谢啊,
xiaoyisnail 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sysabod 的回复:]
但是可以用下标来访问元素,试过可以
[/Quote]

访问是可以,但是你的代码里访问的时候container1还是空的,所以就运行时报错了
sysabod 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 flydream1980 的回复:]
我顺道问个问题? 如何查看 std 里都有哪些 内容?
[/Quote]在编译器下输入std时会自动出现一系列的选项,那些就是std下命名的吧
sysabod 2009-01-16
  • 打赏
  • 举报
回复
但是可以用下标来访问元素,试过可以
wsqshz 2009-01-16
  • 打赏
  • 举报
回复
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<char> container1;
deque<char>::iterator pointer;
container1.push_back('a');
container1.push_back('b');
container1.push_back('c');
for(pointer=container1.begin();pointer!=container1.end();pointer++)
cout<<*pointer<<" ";
}
sysabod 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xiaoyisnail 的回复:]
deque不是通过下标来添加元素的,要用push_back,如下:

C/C++ code
#include <iostream>
#include <deque>
using std::cout;
using std::deque;

int main()
{
deque<char> container1;
deque<char>::iterator pointer;
container1.push_back('a'),container1.push_back('b'),container1.push_back('c');
for(pointer=container1.begin();pointer!=container1.end();pointer++)
cout<<*…
[/Quote]晕,我那本书说这样可以,真是.....
xiaoyisnail 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sysabod 的回复:]
引用 10 楼 waizqfor 的回复:
引用 7 楼 sysabod 的回复:
deque subscript out of range

超出预定范围了
可是程序那里超出范围呢,deque能存的数很多啊,还是别的超出范围
[/Quote]

deque<char> container1;
你这样定义后,container1是空的deque对象,当你container1[0]='a'通过下标访问container1时,由于container1为空,所以就越界了
对deque添加元素要用push_back或push_front
xiaoyisnail 2009-01-16
  • 打赏
  • 举报
回复
deque不是通过下标来添加元素的,要用push_back,如下:

#include <iostream>
#include <deque>
using std::cout;
using std::deque;

int main()
{
deque<char> container1;
deque<char>::iterator pointer;
container1.push_back('a'),container1.push_back('b'),container1.push_back('c');
for(pointer=container1.begin();pointer!=container1.end();pointer++)
cout<<*pointer<<" ";
}
sysabod 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 waizqfor 的回复:]
引用 7 楼 sysabod 的回复:
deque subscript out of range

超出预定范围了
[/Quote]可是程序那里超出范围呢,deque能存的数很多啊,还是别的超出范围
ayw215 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sysabod 的回复:]
谢谢大家了,编译通过了,可是一运行就出错,说是deque subscript out of range
[/Quote]
原因在于你刚开始的时候容器为空
后来你直接用【】运算,这个运算的前提是容器有这么多的空间了,但事实不是这样的。
有两种方法可以修改,
1,指定容器大小:

#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<char> container1;
deque<char>::iterator pointer;
container1.resize(3);
container1[0]='a',container1[1]='b',container1[2]='c';
for(pointer=container1.begin();pointer!=container1.end();pointer++)
cout<<*pointer<<" ";
return 0;
}

2.不用【】而用push
waizqfor 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sysabod 的回复:]
deque subscript out of range
[/Quote]
超出预定范围了
flydream1980 2009-01-16
  • 打赏
  • 举报
回复
我顺道问个问题? 如何查看 std 里都有哪些 内容?
xiaoyisnail 2009-01-16
  • 打赏
  • 举报
回复
加上using std::deque;
sysabod 2009-01-16
  • 打赏
  • 举报
回复
谢谢大家了,编译通过了,可是一运行就出错,说是deque subscript out of range
waizqfor 2009-01-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 waizqfor 的回复:]
C/C++ code
using std::cout//LZ对std还不熟悉的时候 尽量using namespace std;把 多写点省着错
[/Quote]
补充一下
#include <deque>//虽然你这里定义了头文件
using std::cout;//但是这里没有声明 deque方法 你没声明就直接用 编译器肯定不识别啊
加载更多回复(5)

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧