当前位置: 首页>>代码示例>>C++>>正文


C++ list::getXinEnd方法代码示例

本文整理汇总了C++中std::list::getXinEnd方法的典型用法代码示例。如果您正苦于以下问题:C++ list::getXinEnd方法的具体用法?C++ list::getXinEnd怎么用?C++ list::getXinEnd使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在std::list的用法示例。


在下文中一共展示了list::getXinEnd方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: copyNodeEdges

//Copy edges from first node to second
void Graph::copyNodeEdges(std::list<Node>::iterator pn1, std::list<Node>::iterator pn2)
{
    std::list< std::list<Node>::iterator >::iterator pnlist;
    for (pnlist = pn1->getXinBegin(); pnlist != pn1->getXinEnd(); pnlist++)
        setXedge((*pnlist), pn2);
    for (pnlist = pn1->getYinBegin(); pnlist != pn1->getYinEnd(); pnlist++)
        setYedge((*pnlist), pn2);
    for (pnlist = pn1->getXoutBegin(); pnlist != pn1->getXoutEnd(); pnlist++)
        setXedge(pn2, (*pnlist));
    for (pnlist = pn1->getYoutBegin(); pnlist != pn1->getYoutEnd(); pnlist++)
        setYedge(pn2, (*pnlist));
}
开发者ID:clamheart,项目名称:BGG,代码行数:13,代码来源:graph3.cpp

示例2: 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++;
        }
//.........这里部分代码省略.........
开发者ID:clamheart,项目名称:BGG,代码行数:101,代码来源:graph3.cpp

示例3: 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--;
//.........这里部分代码省略.........
开发者ID:clamheart,项目名称:BGG,代码行数:101,代码来源:graph3.cpp


注:本文中的std::list::getXinEnd方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。