Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更新列表的元素stl列表_C++_List_Stl_Iterator - Fatal编程技术网

C++ 更新列表的元素stl列表

C++ 更新列表的元素stl列表,c++,list,stl,iterator,C++,List,Stl,Iterator,我正在处理一个整数向量列表(std::list z(nlevel)) 我可能会有这样的想法: { {1} {2} {3} } { {1 2} {2 1} {1 3} } { {1 2 3} {2 1 3} {1 2 4} } lit = z.begin(); for (i = 0; i < nlevel; i++) { distinct_z(*lit, primes); lit++; } 我需要删除非唯一的整数组合,例如,上面列表的第二个元素应该是 { { 1 2 }

我正在处理一个整数向量列表(
std::list z(nlevel)

我可能会有这样的想法:

{ {1} {2} {3} }
{ {1 2} {2 1} {1 3} }
{ {1 2 3} {2 1 3} {1 2 4} }
lit = z.begin();
for (i = 0; i < nlevel; i++) {
    distinct_z(*lit, primes);
    lit++;
}
我需要删除非唯一的整数组合,例如,上面列表的第二个元素应该是

{ { 1 2 } {1 3} }
这是一个大对象,所以我试图通过引用更新最外层列表的每个元素。我试过这样的方法:

{ {1} {2} {3} }
{ {1 2} {2 1} {1 3} }
{ {1 2 3} {2 1 3} {1 2 4} }
lit = z.begin();
for (i = 0; i < nlevel; i++) {
    distinct_z(*lit, primes);
    lit++;
}
做我想做的事情的最佳方法是什么

背景:数据结构可能看起来不必要的复杂,但我使用广度优先的方法从一个顶点开始枚举所有连接的子图。给定一个当前子图,我看到其他顶点连接起来,创建一组新的子图并重复。我最初是使用int向量列表来完成的,但是删除repeats的速度太慢了,因为如果删除部分向量,我必须复制当前对象。这种方法速度更快,即使结构更复杂

编辑:这里有一个解决方案,主要是做我想要的,虽然它会导致一些不希望的复制。我更新了
distinct_z
以返回对象的副本,而不是修改引用,然后在
lit
处替换元素

  lit = z.begin();
  for (i = 0; i < nlevel; i++) {
    (*lit) = distinct_z(*lit, primes);
    lit++;
  }
lit=z.begin();
对于(i=0;i在C++中,有一个众所周知的习惯用法,称为从STL容器中删除元素。它基本上包括将不需要的项目拖到容器的末尾,然后删除不需要的尾部


我们可以使用谓词函数(例如lambda)来选择要删除的项,并使用

中的函数来显示
distinct_z
可能会有帮助…通过使用不允许重复元素的容器(例如
std::set
)删除非唯一元素最简单。最好显示您的尝试,否则这将有被关闭为“如何删除重复项”问题的重复的危险,这可能是一个好的方向,但当然不能解决代码中的问题。还可以阅读我添加的@Jarod42@formelyknownas
distinct\u z
。谢谢你的帮助
distinct_z
在我的代码的其他部分中正常工作,但在尝试使用迭代器时,在这个特定上下文中不能正常工作。有趣的部分似乎是在
duplicated
中,您没有显示代码。请阅读相关内容,谢谢您的帮助。你真的超越了一切。@drjfrench没问题。