stl高手请进

Jack1Black 2004-07-08 01:52:38
程序如下:我想将容器list中所存储的字符串赋给指针变量st,不知该如何
实现??还望高手指点,迭代器如何将类型转化为想要的类型?


#include <iostream>
#include <string>
#include <list>

using namespace std;

int main (void) {
list<string> Milkshakes;
list<string>::iterator MilkshakeIterator;

char *st;

Milkshakes.push_back("Chocolate");
Milkshakes.push_back("Strawberry");
Milkshakes.push_front("Lime");
Milkshakes.push_front("Vanilla");


// print the milkshakes
Milkshakes.push_front("The Milkshake Menu");
Milkshakes.push_back("*** Thats the end ***");

for (MilkshakeIterator=Milkshakes.begin();
MilkshakeIterator!=Milkshakes.end();
++MilkshakeIterator) {
// dereference the iterator to get the element
cout << *MilkshakeIterator << endl;

//-------------------------------
这里该如何处理迭代器的类型可以使char *的类型st
输出字符串的结果?????????????????

//-------------------------------
//???????????????? cout<<*st<<endl;
}

}
...全文
307 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
warton 2004-07-21
  • 打赏
  • 举报
回复
to C_plus_learner() :

c_str()是模板类string的成员函数
迭代器指向的是字符串对象,当然可以这样用了
expert2000 2004-07-21
  • 打赏
  • 举报
回复
学习,帮顶,楼主给点分我就能提高。^!^
C_plus_learner 2004-07-20
  • 打赏
  • 举报
回复
6
hard_blue 2004-07-20
  • 打赏
  • 举报
回复
循环
for (i=..begin;i<..end;++i)
cout << *MilkshakeIterator << endl;
luotuofen 2004-07-19
  • 打赏
  • 举报
回复

以下输出结果是多少?各位大哥,帮下吗?我是菜鸟谢啦。

main()
{int a=5,b=4,c=6,d;)
printf("%d\n",d=a>b? (a>c?a:c):b);
}
C_plus_learner 2004-07-19
  • 打赏
  • 举报
回复
to:baojian88888{}
st = MilkshakeIterator->c_str(); // 加这句

MilishakeIterator是个Iterator啊,MilkshakeIterator->c_str()为什么可以这么用啊?
请指教!
aixuer 2004-07-10
  • 打赏
  • 举报
回复
那如果我想把一个char *的变量st的值存入容器该怎么办?


我想可以这样 Milkshakes.push_back(string(st));

插入一个临时对象
freefalcon 2004-07-09
  • 打赏
  • 举报
回复
string这么好用的东东怎么不会符合你的要求呢?
string可以直接用cout输出呀

难道你还有别的目的?说说你要用char*的理由
skyMountain 2004-07-09
  • 打赏
  • 举报
回复
"想把一个char *的变量st的值存入容器"

建议楼主去看看C++内存分配方面的书。没时间看的话,把list设为string类型的,直接push_back就行了。
skyMountain 2004-07-09
  • 打赏
  • 举报
回复
char *st=(char *)(*MilkshakeIterator).c_str();
汗……还真不知道有这用法,看来是C++的一个漏洞。尝试了一下:
strcpy(st,"bbb");
TRACE("%s,%d",str.c_str(),str.size());
可以看到,str="bbb",str.size()=4。str出错了,此后的使用中会出现什么问题,难说。
如果
strcpy(st,"bbbbbbbb");
内存越界,不堪设想……

如果要打印string的话,还是调用
cout<<str.c_str()<<endl;
吧,别把const指针转换成可读写指针了,那是搬石头砸自己的脚,不是不得已不用它。
北极猩猩 2004-07-09
  • 打赏
  • 举报
回复
char *st=(char *)(*MilkshakeIterator).c_str();
这样做是比较危险的,因为可以通过st修改对应的string中的字符,如果只是修改还好,一旦新增字符超出原来分配的空间的大小,BOMB!!!
baojian88888 2004-07-09
  • 打赏
  • 举报
回复
哦,上面的 st 最好定义成 const 的,即
const char *st;
baojian88888 2004-07-09
  • 打赏
  • 举报
回复
for (MilkshakeIterator=Milkshakes.begin();
MilkshakeIterator!=Milkshakes.end();
++MilkshakeIterator)
{
cout << *MilkshakeIterator << endl;
//-------------------------------
//这里该如何处理迭代器的类型可以使char *的类型st
//输出字符串的结果?????????????????
//-------------------------------

st = MilkshakeIterator->c_str(); // 加这句

cout<<st<<endl; // 输出字符串,这里只能写 st,不能写 *st
}
expert2000 2004-07-09
  • 打赏
  • 举报
回复
studying....
goodname 2004-07-08
  • 打赏
  • 举报
回复
char *p="this is a string";
string str=p;
push_back(str);
qwertasdfg123 2004-07-08
  • 打赏
  • 举报
回复

把char*转换成string,然后push_back push_front.
pacman2000 2004-07-08
  • 打赏
  • 举报
回复
那就是push_back()和push_front()啊。。。
Jack1Black 2004-07-08
  • 打赏
  • 举报
回复
to goodname(叶落知秋) :
那如果我想把一个char *的变量st的值存入容器该怎么办?怎么去查这些方法?msdn上也找不到阿?谢谢
goodname 2004-07-08
  • 打赏
  • 举报
回复
char *st=(char *)(*MilkshakeIterator).c_str();
cout << st << endl;

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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