为什么矢量赋值会更改指定的矢量

时间:2013-09-20 21:38:32

标签: c++ vector size variable-assignment

案例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语句为true。在第二种情况下,if是错误的。在两种情况下,首先y [x]的大小为零。但在将y [x]赋值给v后的第一种情况下,y [x]的大小变为1.

这是怎么发生的?而且我们如何将y [x]分配给v而不影响y [x]?

1 个答案:

答案 0 :(得分:2)

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

如果您不希望这样,请使用map::at(如果密钥不存在则抛出异常,因此您必须处理该异常)或map::find(返回迭代器)使用该键的元素,如果没有这样的元素,则为map::end