vector的大小的疑问--begin()到end()不等于大小

大鸟的小天空 2006-05-27 11:30:59
vector<string> sound_path;
sound_path.size() 是8
但是使用
for (vector<string>::const_iterator p=sound_path.begin();p!=sound_path.end();++p)
打印出来的却只有5个值,

大侠能否告知这会是什么问题造成的。实在是纳闷了,不会是内存操作有问题吧

具体的代码如下:
void test()
{
for(int i=0;i<100;++i)
test1();
}

void test1()
{
vector<string> sound_path;
sound_path.push_back("aaaa");
sound_path.push_back("bbbb");
test2(sound_path);
}

void test2(vector<string> & sound_path)
{
printf("%d",sound_path.size());
for (vector<string>::const_iterator p=sound_path.begin();p!=sound_path.end();++p)
sprintf(tmp,"P:%s",(*p).c_str());
}
这样的代码是否有什么隐藏的问题.
...全文
545 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sungengyu 2006-05-31
  • 打赏
  • 举报
回复
我3个月前也碰到过几乎一样的情况:我用一个map ,size()==1 并且 begin()==end() 。

我当时怀疑可能和线程或动态库的一些东西有关系。因为这段代码在一个动态库中,并且map作为函数的参数传递。后来改用 vector 就正常了。不过测试表明,map在动态库中作为导出函数的参数也是没问题的。那么大概是多线程的原因?具体的问题一直没找到。
bjzhaoxiao 2006-05-30
  • 打赏
  • 举报
回复
你现把循环中的代码注视调,只留下来打印vector内容的代码看看,估计是你的条件屏蔽了没有显示出来的记录。
大鸟的小天空 2006-05-29
  • 打赏
  • 举报
回复
我也奇怪,作的测试代码都没有问题,循环执行10000遍,vector也很正常,而且我的代码里面也就是那样处理的,就是不知道问题在哪里,而且一旦这个问题出现,也会影响其他的数据处理,有可能是tmp的问题,但是tmp的大小为256*8,对于我的使用,足够大了,我就放一些文件路径。。。
这个程序是24小时执行的,第一天运行还是很正常,第二天都有点问题了,而且不是所有时候都不正常,偶尔也会很正常。。真是奇怪了。。
感觉在内存处理上也没啥问题,要么是局部变量,要么是全局变量,都不用delete的。所有的类都是单件模型,在运行期间也不需要delete的。
怀疑
1.是不是太多的vector<string>的局部变量了。
2.是vector<string> a;vector<string> b;b.push_back("aaa")...;a=b;造成的。
但是经过测试代码测试,都没有啥问题呀,可郁闷。
sungengyu 2006-05-29
  • 打赏
  • 举报
回复
野指针?
吃狼的豆腐 2006-05-28
  • 打赏
  • 举报
回复
你是全部放在tmp中,然后输出???

先看下tmp的大小吧,可能后面遇到结束符也不一定,可能后面那些就不会输出
winter_plusplus 2006-05-28
  • 打赏
  • 举报
回复
如果.size()确实是8,那么是不是你显示的有问题。
或者说虽然大小是8,但是后面几个string的内容为空

你贴出来的代码确实不可能看出问题所在的
逸学堂 2006-05-28
  • 打赏
  • 举报
回复
1:把vector改成list测试一下
2:vector的有size测试容器内变量的多少,还有capacity测试容器的容量.那么lz用capacity测试一下
是否和size相同.
3:会不会有些地方使用erase操作了?
snailbreak 2006-05-27
  • 打赏
  • 举报
回复
vector<string> sound_path;
sound_path.size() 是8
但是使用
for (vector<string>::const_iterator p=sound_path.begin();p!=sound_path.end();++p)
打印出来的却只有5个值,


把这个代码贴出来
oyljerry 2006-05-27
  • 打赏
  • 举报
回复
vector的大小选取是否正确,怎么显示的
cnhgj 2006-05-27
  • 打赏
  • 举报
回复
先写个简单的代码自已测试下吧。肯定是你程序的问题。。
wzjall 2006-05-27
  • 打赏
  • 举报
回复
肯定不是vector的问题!

你这个也看不出什么问题来呀!
要不来个完整的事例看看
大鸟的小天空 2006-05-27
  • 打赏
  • 举报
回复
我可能没说清楚,下面的代码是相应的处理代码,我说的8是我代码中的值,下面的代码是按照我的代码整理出来的使用例子,方便大家看,下面确实是2,我就是让你们看看下面的代码是否有什么问题,比如:临时变量的使用,引用参数等...
我也实在是纳闷.

mlog->createLogQ("Start Play File");
if (IS_DEBUG>3)
{
sprintf(tmp,"Start Play File--CH:%d--oneTime:%d---Size:%d",ch_index,oneTime,sound_path.size());
mlog->createLogQ(tmp);
}
if (oneTime<0) last_sound[ch_index].sound_index.clear();
if (oneTime==0) last_sound[ch_index].sound_index = sound_path;

stopPlaySound(ch_index,false);
SsmClearFileList(ch_index);
for (vec_string_io p=sound_path.begin();p!=sound_path.end();++p)
{
if (IS_DEBUG>3)
{
sprintf(tmp,"P:%s--CH:%d",(*p).c_str(),ch_index);
mlog->createLogQ(tmp);
}
strcpy(tmp,(*p).c_str());
if (-1==SsmAddToFileList(ch_index,tmp,6,0,0xffffffff)) lastErrShow();
}
strcpy(tmp,sound_info[JingYin].c_str());
if (-1==SsmAddToFileList(ch_index,tmp,6,0,0xffffffff)) lastErrShow();
if (-1==SsmPlayFileList(ch_index)) lastErrShow();

这是我的程序代码,打印出来的大小确实是8,但是下面循环显示的日志只有4条..奇怪了..
wf520pb 2006-05-27
  • 打赏
  • 举报
回复
怎么会不一样呢,应该是你的错,size只可能是2,你只push_back了2次,怎么会是8呢?
sharpdew 2006-05-27
  • 打赏
  • 举报
回复
大侠能否告知这会是什么问题造成的。实在是纳闷了,不会是内存操作有问题吧
~~~~~~~~~~~~~~~~~~~~~~~~~~~
唯一的原始只可能是你的代码有问题,肯定不是vector的问题!
Cccufo 2006-05-27
  • 打赏
  • 举报
回复
lz 不对啊 你给的vector(string) sound_path.size()=2
和前面说的 8 没有联系啊
Visual Studio Code 是由微软开发的一款免费、开源、跨平台的现代化轻量级代码编辑器,自发布以来迅速成为全球开发者最受欢迎的工具之一。它结合了编辑器的轻便性和集成开发环境(IDE)的强大功能,支持多种编程语言和开发场景,核心特点: 1. 跨平台支持 可在 Windows、macOS 和 Linux 上运行,保持一致的用户体验。 2. 轻量级与高性能 启动速度快,占用资源少,适合处理大型项目或低配置设备。 3. 智能代码补全 内置 IntelliSense(智能感知),提供代码提示、参数信息、快速修复等功能,支持 JavaScript、TypeScript、Python、C++ 等主流语言。 4. 内置终端 直接在编辑器内打开集成终端(支持 PowerShell、CMD、Bash 等),方便执行命令行操作。 5. 调试工具 内置调试器,支持断点、变量监视、调用堆栈查看等,无需离开编辑器即可调试代码。 6. Git 集成 直接通过侧边栏管理 Git 仓库,支持提交、分支切换、冲突解决等操作。 7. 丰富的扩展生态系统 通过 Extensions Marketplace 可安装数千款插件,扩展功能包括: 语言支持:如 Java、Go、Rust 等。 主题与图标:自定义界面风格。 工具集成:如 Docker、Kubernetes、数据库连接等。 效率工具:如 REST Client、Live Server 等。 8. 自定义与主题 支持修改键盘快捷键、界面主题、文件图标等,打造个性化开发环境。 9. 多光标编辑 按住 Alt(Windows/Linux)或 Option(macOS)点击可添加多个光标,同时编辑多处代码。 10. 远程开发支持 通过 Remote - SSH、Remote - Containers 等扩展,可直接连接远程服务器或开发容器,实现无缝协作。

65,189

社区成员

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

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