push_back() 更改函数中其他向量的大小

push_back() changes size of other vector in function

本文关键字:其他 向量 函数 back push      更新时间:2023-10-16

>我正在创建一个类,该类具有连接两个unique_ptrs向量的函数。当我使用 push_back 函数时,参数向量的大小会发生变化,我不知道为什么。

class A: public vector<unique_ptr<int>>{        
    public:
        A& concatenate(A& c);   
};
A& A::concatenate(A& c) {
    for(int i = 0; i < c.size(); i++) { //this loop never stops
        push_back(make_unique<int>()); //this line changes the size of c?
        (*this)[(*this).size() - 1] = move(c[i]);
    }
    return *this;
}

for 循环不会停止运行,因为每次使用 push_back 方法时,c 的大小也会增加 1。

我还想在 for 循环之前使用 resize(),然后移动所有指针,但我想知道为什么 push_back 方法会更改另一个向量。

当这个 A 和 c A 对象相同时,可能会发生这种情况,即您尝试在一个对象上调用 concatenate 并将相同的对象作为 param 传递给连接。所以实际上push_back并没有改变另一个向量的大小。它与您正在处理的矢量相同。

附带说明一下,您的代码和帖子几乎没有问题

  1. 正如@PaulMcKenzie所说,您应该发布MCVE
  2. 一般来说,从 STL 容器派生不是一个好主意
  3. 除非你试图学习如何实现,否则你应该首先尝试查找和使用STL容器提供的方法。@Some程序员伙计。