为什么向量分配会改变分配的向量

Why vector assignment changes the assigned vector

本文关键字:向量 分配 改变 为什么      更新时间:2023-10-16

案例 1

void insert(map<string, vector<int>> &y,const string &x)
{
vector<int> v=y[x];
if(!y.count(x)>0)
  {
    ...
  }
}

案例2

void insert(map<string, vector<int>> &y,const string &x)
{
//vector<int> v=y[x];
if(!y.count(x)>0)
   {
   ...
  }
}

在第一种情况下,if 语句为真。在第二种情况下,if 为假。在这两种情况下,y[x] 的大小起初都是零。但在将 y[x] 分配给 v 后的第一种情况下,y[x] 的大小变为 1。

这是怎么发生的?还有我们如何才能将 y[x] 分配给 v,而不会影响 y[x]?

因为如果传递给它的键尚不存在,map::operator[]会创建一个具有默认构造值的键值对。

如果您不希望这样做,请使用 map::at(如果键不存在,它将引发异常,因此您必须处理它)或map::find(将迭代器返回到具有该键的元素,或者如果没有这样的元素,则map::end)。