矢量插入使程序崩溃

发布于 2024-09-25 19:35:31 字数 1280 浏览 3 评论 0原文

谁能告诉我

为什么这会使我的程序崩溃?它应该使 t 向量中的所有元素都按 (y + height) 排列。

编辑:在其中包含“插入”的行上崩溃。

void createDrawOrder(vector<Thing*> t, vector<int> *order) {
        int min = t[0]->y + t[0]->height;
        int max = t[0]->y + t[0]->height;

        vector<int>::iterator it;

        it = order->begin();

        order->push_back(0);

        for (int i = 1; i < (int) t.size(); i++) {
            if ((t[i]->y  + t[i]->height) < min) {
                min = (t[i]->y  + t[i]->height);
                order->insert(it, i);
            }

            else if((t[i]->y + t[i]->height) >= min && (t[i]->y + t[i]->height) < max){

                int tempsize = (int) order->size();

                for (int j = 0; j < tempsize; j++){
                    if((t[i]->y + t[i]->height) <= (t[(*order)[j]]->y + t[(*order)[j]]->height)){
                            order->insert(it + j, i);
                    }
                }
            }

            else if ((t[i]->y + t[i]->height) >= max) {
                max = (t[i]->y + t[i]->height);
                order->push_back(i);
            }
        }

    }//end method max

Can anyone tell me

why this crashes my program? It's suppose to make it so order has all the elements in the t vector situated by (y + height).

Edit: crashes on the lines with "insert" in them.

void createDrawOrder(vector<Thing*> t, vector<int> *order) {
        int min = t[0]->y + t[0]->height;
        int max = t[0]->y + t[0]->height;

        vector<int>::iterator it;

        it = order->begin();

        order->push_back(0);

        for (int i = 1; i < (int) t.size(); i++) {
            if ((t[i]->y  + t[i]->height) < min) {
                min = (t[i]->y  + t[i]->height);
                order->insert(it, i);
            }

            else if((t[i]->y + t[i]->height) >= min && (t[i]->y + t[i]->height) < max){

                int tempsize = (int) order->size();

                for (int j = 0; j < tempsize; j++){
                    if((t[i]->y + t[i]->height) <= (t[(*order)[j]]->y + t[(*order)[j]]->height)){
                            order->insert(it + j, i);
                    }
                }
            }

            else if ((t[i]->y + t[i]->height) >= max) {
                max = (t[i]->y + t[i]->height);
                order->push_back(i);
            }
        }

    }//end method max

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青朷 2024-10-02 19:35:31

您的迭代器 it 不保证在 order->push_back(k); 之后有效,它可以重新分配向量中的元素。由于我没有看到您在任何地方实际增加 it ,因此我建议在此函数中将其替换为 order->begin() 的丑陋解决方案。

Your iterator it is not guaranteed to be valid after order->push_back(k); which can reallocate the elements in your vector. Since I don't see you actually incrementing it anywhere, I'd recommend the uglier solution of replacing it with order->begin() in this function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文