使用operator =将向量(从向量向量中提取)赋值给另一个向量时出错

时间:2016-05-16 11:39:18

标签: c++ c++11

我从我的真实代码中推断出这个示例代码:

vector<vector<unsigned short int> > v;
vector<unsigned short int> c;
vector< vector<unsigned short int> >  *suffC;
vector<unsigned short int> d;
int index =0;

c.push_back(2);
c.push_back(3);
v[0]=c;

suffC = &v;
d = suffC[index];

最后一条指令在编译时给出了错误。对于编译器来说,两个操作数(operator =)就是两种不同的类型。 我哪里错了?

2 个答案:

答案 0 :(得分:2)

按照C&C的规则,C ++以两种方式处理指针:

  • 作为指针,允许您将*应用于他们,
  • 作为数组,允许您将下标运算符[]应用于它们。

当您将下标应用于指针suffC时,C ++使用第二个选项 - 它将您的指针视为向量矢量数组。为了获得正确的赋值,首先将*应用于指针,然后应用下标。这将确保应用std::vector的自定义下标运算符。

请注意\[\] has higher precedence than *,因此您需要在*suffC周围添加括号:

(*suffC)[...]

答案 1 :(得分:0)

对于defualt,v的大小为零,当我们使用重载字符[]时,这将是编译错误。