说我有以下内容:
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中可能出现的情况吗?如果不是这样做的正确方法?
由于
答案 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;
}
}
正如前面提到的,对于非常小的向量,效率可能不会产生巨大的差异,但是在较大的向量上实际上可能是很大的。
通过直接修改原始矢量所节省的成本有两种: