std :: vector是否可以=另一个std :: vector?

时间:2010-08-16 17:55:08

标签: c++ stl vector

说我有以下内容:

std::vector<int> myints;

然后我有一个返回int向量的函数:

std::vector<int> GiveNumbers()
{
  std::vector<int> numbers;
for(int i = 0; i < 50; ++i)
{
  numbers.push_back(i);
}

return numbers;
}
然后我可以这样做:

myints = GiveNumbers();

会安全地做到这一点,以便myint的数字为0到49而没有别的吗?这样做会清楚以前在myint中可能出现的情况吗?如果不是这样做的正确方法?

由于

4 个答案:

答案 0 :(得分:7)

是。这很安全。您将把GiveNumbers()函数的结果复制到myints。它可能不是最有效的方法,但它是安全和正确的。对于小向量,效率差异不会那么大。

答案 1 :(得分:1)

是的,它将分配它,它将清除之前接收向量中的内容。

答案 2 :(得分:1)

是的,事实上,return numbers GiveNumbers()正在将向量复制到堆栈中。

当您使用operator=时,您将获得与新矢量相同的内容

答案 3 :(得分:1)

正如已经提到的,这是非常安全的,尽管不是最有效的方法。

为节省资源,最好通过引用传递矢量,并直接修改它。

void setNumbers(vector<int> &nums)
{
   nums.resize(50);
   for(int i = 0; i < 50; ++i)
   {
      nums[i] = i;
   }
}

正如前面提到的,对于非常小的向量,效率可能不会产生巨大的差异,但是在较大的向量上实际上可能是很大的。

通过直接修改原始矢量所节省的成本有两种:

  1. 节省内存(不创建临时载体)
  2. 速度节省(仅迭代N次以在一次传递中设置矢量,而不是一次传递来设置临时矢量,第二次传递将它们复制到原始传感器中)