本文整理汇总了C++中std::list::getSizeYin方法的典型用法代码示例。如果您正苦于以下问题:C++ list::getSizeYin方法的具体用法?C++ list::getSizeYin怎么用?C++ list::getSizeYin使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类std::list
的用法示例。
在下文中一共展示了list::getSizeYin方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: insertDuplicateNodes
//Similar to clearDuplicateNodes(); inserts duplicate nodes into list instead of deleting them
void Graph::insertDuplicateNodes(std::list<Node>::iterator pn, std::list< std::list<Node>::iterator >& deleteNodes)
{
//If there are multiple nodes in the xin list then all these nodes are identical as group elements,
//so function will choose one to preserve and insert the rest into the given list.
if (pn->getSizeXin() > 1)
{
//Select the node with the least letters to preserve.
std::list<Node>::iterator preservedNode = pn->getXin();
int presSumExp = 0;
std::vector<short> presWord = preservedNode->getElemName();
for (int i = 0; i < presWord.size(); i++)
presSumExp += presWord[i];
std::list< std::list<Node>::iterator >::iterator plnIter;
for (plnIter = pn->getXinBegin(); plnIter != pn->getXinEnd(); plnIter++)
{
std::vector<short> word = (*plnIter)->getElemName();
int sumExponents = 0; //counts number of letters total in the word
for (int i = 0; i < word.size(); i++)
sumExponents += word[i];
//In this case the node you have is the identity, which you definitely want to keep
if (sumExponents == 0)
{
preservedNode = *plnIter;
break;
}
//If word has less letters than the current preserved node, set it as preserved
if (sumExponents < presSumExp)
{
preservedNode = *plnIter;
presSumExp = sumExponents;
}
}
//At this point the node which is to be preserved has been chosen. Now copy the edges from the
//trash nodes to the preserved node and insert the trash nodes into the list.
plnIter = pn->getXinBegin();
while (plnIter != pn->getXinEnd())
{
//Ignore the preserved node
if ((*plnIter) == preservedNode)
{
plnIter++;
continue;
}
//Copy edges and add node to list
copyNodeEdges(*plnIter, preservedNode);
deleteNodes.push_back(*plnIter);
plnIter++;
}
}
//this is symmetrical to the above block
if (pn->getSizeYin() > 1)
{
std::list<Node>::iterator preservedNode = pn->getYin();
int presSumExp = 0;
std::vector<short> presWord = preservedNode->getElemName();
for (int i = 0; i < presWord.size(); i++)
presSumExp += presWord[i];
std::list< std::list<Node>::iterator >::iterator plnIter;
for (plnIter = pn->getYinBegin(); plnIter != pn->getYinEnd(); plnIter++)
{
std::vector<short> word = (*plnIter)->getElemName();
int sumExponents = 0;
for (int i = 0; i < word.size(); i++)
sumExponents += word[i];
if (sumExponents == 0)
{
preservedNode = *plnIter;
break;
}
if (sumExponents < presSumExp)
{
preservedNode = *plnIter;
presSumExp = sumExponents;
}
}
plnIter = pn->getYinBegin();
while (plnIter != pn->getYinEnd())
{
if ((*plnIter) == preservedNode)
{
plnIter++;
continue;
}
copyNodeEdges(*plnIter, preservedNode);
deleteNodes.push_back(*plnIter);
plnIter++;
}
//.........这里部分代码省略.........
示例2: clearDuplicateNodes
//Clear dup. nodes pointing to passed in node, return true if such dup.s found
bool Graph::clearDuplicateNodes(std::list<Node>::iterator pn)
{
if (pn->getSizeXin() > 1)
{
//choose the node you want to keep by finding the one with the least letters in its word
std::list<Node>::iterator preservedNode = pn->getXin();
int presSumExp = 0;
std::vector<short> presWord = preservedNode->getElemName();
for (int i = 0; i < presWord.size(); i++)
presSumExp += presWord[i];
std::list< std::list<Node>::iterator >::iterator plnIter;
for (plnIter = pn->getXinBegin(); plnIter != pn->getXinEnd(); plnIter++)
{
std::vector<short> word = (*plnIter)->getElemName();
int sumExponents = 0; //counts number of letters total in the word
for (int i = 0; i < word.size(); i++)
sumExponents += word[i];
//in this case the node you have is the identity, which you definitely want to keep
if (sumExponents == 0)
{
preservedNode = *plnIter;
break;
}
//if word has less letters than the current preserved node, set it as preserved
if (sumExponents < presSumExp)
{
preservedNode = *plnIter;
presSumExp = sumExponents;
}
}
//okay so at this point the node which is to be kept has been chosen. now copy the edges from the
//trash nodes to the preserved node and delete the trash nodes
plnIter = pn->getXinBegin();
while (plnIter != pn->getXinEnd())
{
//skip over the preserved node
if ((*plnIter) == preservedNode)
{
plnIter++;
continue;
}
//copy edges, remove node, set the iterator to the previous node
std::list< std::list<Node>::iterator >::iterator prevNodeIter = plnIter;
prevNodeIter--;
copyNodeEdges(*plnIter, preservedNode);
removeNode(*plnIter);
plnIter = prevNodeIter;
}
return true;
}
//this is symmetrical to the above block
if (pn->getSizeYin() > 1)
{
std::list<Node>::iterator preservedNode = pn->getYin();
int presSumExp = 0;
std::vector<short> presWord = preservedNode->getElemName();
for (int i = 0; i < presWord.size(); i++)
presSumExp += presWord[i];
std::list< std::list<Node>::iterator >::iterator plnIter;
for (plnIter = pn->getYinBegin(); plnIter != pn->getYinEnd(); plnIter++)
{
std::vector<short> word = (*plnIter)->getElemName();
int sumExponents = 0;
for (int i = 0; i < word.size(); i++)
sumExponents += word[i];
if (sumExponents == 0)
{
preservedNode = *plnIter;
break;
}
if (sumExponents < presSumExp)
{
preservedNode = *plnIter;
presSumExp = sumExponents;
}
}
plnIter = pn->getYinBegin();
while (plnIter != pn->getYinEnd())
{
if ((*plnIter) == preservedNode)
{
plnIter++;
continue;
}
std::list< std::list<Node>::iterator >::iterator prevNodeIter = plnIter;
prevNodeIter--;
//.........这里部分代码省略.........