学习C++ STL时遇到的小疑问

[复制链接]
查看11 | 回复3 | 2009-6-4 20:39:47 | 显示全部楼层 |阅读模式
#include
#include
using namespace std;
int main()
{

deque test;

//test.push_front( 1 );

test[ 0 ] = 1;

cout << test[ 0 ] << endl;

cout << test.size() << endl;

return 0;
}
我不明白的是:
deque类对象test明明靠直接访问( test[ 0 ] = 1 )就能赋值,为何还要用push_front()呢?但为什么直接使用test[ 0 ] = 1会造成cout << test.size() << endl;的结果为0?test明明含有一个元素,应该为1才对啊?

回复

使用道具 举报

千问 | 2009-6-4 20:39:47 | 显示全部楼层
我再来回答一下~~这个程序确实编译通过但是不能运行(VC6下),首先test[ 0 ] = 1只是一个赋值操作,他不会管有没有内存空间,所以使用这条语句之前一定要为其分配内存空间,比如说加一句:test.resize(10,0)。否则编译通过也运行不了。而push系列的操作首先在队列里会为其分配一块内存空间,然后将数值放进去。所以他并不需要提前用别的语句分配内存。...
回复

使用道具 举报

千问 | 2009-6-4 20:39:47 | 显示全部楼层
这个程序只是编译通过了,运行不起来的(用VC++6.0 VS.NET2003试过)test[0] = 1;会发生运行时错误,因为 STL 还没有为 test[0] 分配内存空间test[0] 的分配时机是第一次调用 test.push_front()test[1] 的分配时机是第二次调用 test.push_front()test[2] ...
回复

使用道具 举报

千问 | 2009-6-4 20:39:47 | 显示全部楼层
你这样想一下,test[ 0 ] = 1 是把test里面的第一个元素赋值为1,但问题是这个容器里面还没有任何元素呢,“test明明含有一个元素”这句话从何而来呢比如在push_back或push_front以及其他的一些比如构造操作后才会有元素的,而下标操作符返回的是指向元素的引用...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行