![](/img/trans.png)
[英]How much it is safe to store and reuse the iterator values of map in another map?
[英]Safe to store and reuse vector iterator values?
我正在使用图形构建C ++程序。 我正在使用类的向量。 问题是当我将类的新对象插入向量时,迭代器的先前值开始指向一些垃圾值。 我的课如下:
class LinkedList
{
public:
int node;
list <children> child;
vector <vector <LinkedList>::iterator > pl; // it store the iteration values of parent of node
vector <vector <LinkedList>::iterator > cl; // it store the iteration values of childof node
};
class children
{
public:
int dest;
string label;
};
存储和重用迭代器值有多少安全?
下面的功能如下:
首先,它将找到每个节点的父级和子级,并分别存储迭代结果。
其次,它将是图的子代(没有进一步子代节点的节点)。
当它尝试将子节点插入到图中时,其他节点的迭代将变成垃圾。
void parentchildList(vector <LinkedList> &graph)//, vector <transclosure> &tc)
{
vector <int> childNode;
for(vector<LinkedList>::iterator ii = graph.begin(); ii != graph.end(); ii++)
{
for(vector<LinkedList>::iterator it = graph.begin(); it != graph.end(); it++)
{
for(list<children>::iterator li = it -> child.begin(); li != it -> child.end(); li++)
{
if(ii -> parent == li -> dest)
{
ii -> pl.push_back(it);
it -> cl.push_back(ii);
}
}
}
}
//Finding child nodes in a graph.
for(vector<LinkedList>::iterator ii = graph.begin(); ii != graph.end(); ii++)
{
if(ii ->cl.size() != ii->child.size()) // finding child nodes and adding them to graph //linking child nodes
{
bool flag = false;
for(list<children>::iterator li = ii -> child.begin(); li != ii -> child.end(); li++)
{
flag = false;
for(vector <vector <LinkedList>::iterator >::iterator itt = ii->cl.begin(); itt != ii->cl.end(); itt++)
{
if((*itt)->parent == li->dest)
flag = true;
}
if(!flag)
childNode.push_back(li->dest);
}
}
}
sort(childNode.begin(), childNode.end());
childNode.erase(unique(childNode.begin(), childNode.end()),childNode.end());
cout<<"Child Nodes are ";
for(vector<int>::iterator it=childNode.begin(); it!= childNode.end(); it++)
cout<<*it<<" ";
cout<<endl;
for(vector<int>::iterator it=childNode.begin(); it!= childNode.end(); it++)
{
LinkedList obj;
obj.parent = *it;
graph.push_back(obj);
// Error happens here when I tried to insert a new obj into graph, all vaues of pl and cl becomes garbage.
}
}
存储和重用迭代器值有多少安全?
的std ::矢量::插入
如果新的size()大于旧的Capacity(),则导致重新分配。
如果新的size()大于Capacity(),则所有迭代器和引用均无效 。
否则,只有插入点之前的迭代器和引用保持有效。
过去的迭代器也无效。
您可以放心地假设最终新大小将大于初始容量。
因此,您没有使用正确的数据结构。
您的设计靠近相邻列表 。 因此,请使用std::list
,它不会在插入时使迭代器或引用无效 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.