【问题标题】:Why is problemsPathCoordinate vector of a vector of a pair empty?为什么一对向量的问题路径坐标向量为空?
【发布时间】:2016-03-03 01:26:03
【问题描述】:

我试图用一个对向量的一个较大向量中的一些内容来填充一个对向量的一个较小向量,但没有成功。以下是带有 couts 及其输出的相关代码。希望这足够详细。

    /*******************Problems Occur*****************/

        int iFirst=problemsStartAt;//first index to copy
        int iLast=problemsEndAt-1;//last index -1, 11th stays
        int iLen=iLast-iFirst;//10-8=2
        //if(problemsStartAt!=0)//I.a
        if(problemsStartAt!=0&&problemsEndAt!=0)//I.b
        {
            v_problem_temp=allPathCoordinates[problemsStartAt];
            cout<<"266:"<<v_problem_temp.size()<<endl;
            cout<<"267:"<<allPathCoordinates.at(1).size()<<endl;
            for(vector<pair<int,int>>::iterator  it2=v_problem_temp.begin();
            it2!=v_problem_temp.end();
            ++it2)
                {
                    apair=*it2;
                    point[apair.first][apair.second]=Yellow;
                    cout<<apair.first<<","<<apair.second<<endl;
                }
                problemsPathCoordinate.resize(iLen);
                cout<<"iLen*sizeof(problemsPathCoordinate):"      <<iLen*sizeof(problemsPathCoordinate)<<endl;


                    memcpy(&problemsPathCoordinate[0],&allPathCoordinates[iFirst],iLen*sizeof(problemsPathCoordinate));
        cout<<"279:problemsPathCoordinate.size():"<<problemsPathCoordinate.size()<<endl;

        problemsPathCoordinate.resize(iLen);
        memcpy(&problemsPathCoordinate[0],&allPathCoordinates[iFirst],iLen*sizeof(problemsPathCoordinate));
        cout<<"283:problemsPathCoordinate.size():"<<problemsPathCoordinate[0].size()<<endl;
        cout<<"284:problemsPathCoordinate.size():"<<problemsPathCoordinate[1].size()<<endl;

        cout<<"286:allPathCoordinates.size():"<<allPathCoordinates.size()<<endl;
        cout<<"287:allPathCoordinates.size():"<<allPathCoordinates.size()<<endl;
        //from http://stackoverflow.com/questions/35265577/c-reverse-a-smaller-range-in-a-vector


}
    Output:
    759: path NOT full-filled, number: 8
    755: Problems START here at:8
    759: path NOT full-filled, number: 9
    700: Problems END here at: 11
    266:0
    267:0
    iLen*sizeof(problemsPathCoordinate):72
    279:problemsPathCoordinate.size():3
    283:problemsPathCoordinate.size():0
    284:problemsPathCoordinate.size():0
    286:allPathCoordinates.size():79512
    287:allPathCoordinates.size():79512
    time:39 seconds

为什么三个问题PathCoordinate元素都是空的。如何解决? 博

【问题讨论】:

  • sizeof(problemsPathCoordinate)problemsPathCoordinate.size() 完全不同。前者与problemsPathCoordinate 容器中的元素数量无关,也与这些元素的字节大小无关。
  • memcpy 复制重要的对象(如vector)会表现出未定义的行为。使用分配,或std::copy
  • 我尝试使用如下所示的 erase() 函数来替代我的第一个问题。很抱歉,它也不起作用:
  • 感谢您的回答。如果您能如此友善并使用我提供的代码向我展示如何通过副本或作业修复它,那对我来说甚至会更有用。提前谢谢你。

标签: c++11


【解决方案1】:

for (vector>::iterator it = allPathCoordinates.begin(); it != allPathCoordinates.end(); ++it) { allPathCoordinates.erase(allPathCoordinates.begin()+5,allPathCoordinates.end()-2); v_temp = *它; //cout

    for (vector<pair<int,int> >::iterator it2 = v_temp.begin(); it2 != v_temp.end(); ++it2) {
        //v_temp.erase(v_temp.begin()+2);
        apair = *it2;
        //cout << "(" << apair.first << "," << apair.second << ") ; ";
        openPoints[apair.first][apair.second]=0;
        closedPoints[apair.first][apair.second]=1;
        allObstacles[apair.first][apair.second]=Wall;
        point[apair.first][apair.second]=Yellow;
    }
    /

【讨论】:

    猜你喜欢
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多