尝试在objective-c程序中使用std::list

尝试在objective-c程序中使用std::list,objective-c,list,stl,Objective C,List,Stl,我试图在objective-c程序中使用std::list,但运行时出现问题 我有(为简洁起见编辑) #导入 ... @接口Foo{ std::list*myList; } ... @执行Foo -(无效)循环列表{ myList=新标准::列表; 对于(std::list::iterator ii;ii!=myList->end();++ii) { //在这里什么也不做 } } 一切编译都很好,但我在执行for循环时获得了EXC_BAD_访问权限。我没有对这些内容做任何事情,只是(目前)循环

我试图在objective-c程序中使用std::list,但运行时出现问题

我有(为简洁起见编辑)

#导入
...
@接口Foo{
std::list*myList;
}
...
@执行Foo
-(无效)循环列表{
myList=新标准::列表;
对于(std::list::iterator ii;ii!=myList->end();++ii)
{
//在这里什么也不做
}
}
一切编译都很好,但我在执行for循环时获得了EXC_BAD_访问权限。我没有对这些内容做任何事情,只是(目前)循环浏览它们

我会使用NSMultableArray,但我需要在迭代时快速插入和删除元素,这是不可能的。另外,我想使用stl解决速度问题

我已将文件设置为sourcecode.cpp.objcpp


谢谢。

< P>我不知道关于目标C,但是在C++中,你需要告诉迭代器它正在重复的列表实例:

for (std::list<Bar *>::iterator ii = myList->begin(); 
                  ii != myList->end(); ++ii) 
for(std::list::iterator ii=myList->begin();
ii!=myList->end();++ii)
此行:

for (std::list<Bar *>::iterator ii; ii != myList->end(); ++ii) 
for(std::list::iterator ii;ii!=myList->end();++ii)
需要成为:

for (std::list<Bar *>::iterator ii = myList->begin(); ii != myList->end(); ++ii) 
for(std::list::iterator ii=myList->begin();ii!=myList->end();++ii)

在您的版本中,
ii
从未被赋值,因此它没有可迭代的内容。根据您发布的代码,原因尚不清楚,但正因为如此,您稍后会尝试取消对无效内存地址的引用,这就是您生成异常(EXC_BAD_ACCESS)的原因。

myList是指针,ii是迭代器对象,带有构造函数,而不仅仅是“随机内存”。谢谢,添加ii=myList->begin()解决了这个问题。不知道为什么我错过了@尼尔:作为迭代器并不能保证构造函数的存在,构造函数的存在也不能保证任何东西的初始化@尼尔:
ii
只包含堆栈中分配位置的任何内容的值。这不是一个有效的对象。为什么他会得到<代码> ExcBad访问/<代码>错误?C++标准121.9说:“默认构造函数被隐式地调用以创建静态或自动存储持续时间的类对象…………没有初始化器定义。”将对象添加到列表中时,
stl::list
不会保留对象,因此如果要添加
NSObject
派生,请确保它们的保留计数足以在运行循环中存活。
for (std::list<Bar *>::iterator ii = myList->begin(); ii != myList->end(); ++ii)