没有匹配函数来调用&#39; std :: vector <int> :: insert&#39;使用宏

时间:2018-05-09 06:07:00

标签: c++ macros

我写了一个代码,它对矢量执行一些操作,我在其中定义了一个宏:

#define all(c) ((c).begin(),(c).end())

...并使用v2.insert(1, all(v1))将该宏用于矢量插入。

这意味着我想在向量v1的第二个位置插入向量v2中的所有元素。但是,我在使用insert函数调用的行上收到以下错误:

  

没有匹配函数来调用&#39; std :: vector :: insert ...

代码如下:

#include<iostream>
#include<stdio.h>
#include<vector>
#include<stdlib.h>

#define all(c) ((c).begin(),(c).end())
using namespace std;
int main()
{
    int data[]={1,2,3,4,5,6,7,8};
    vector<int> v1(data+1,data+5);
    vector<int> v2(2,1);

    v2.insert(1,all(v1));

    printf("\n Before the for loop");
    for(vector<int> v2::iterator it=v2.begin();it!=v2.end();it++)
    {
        printf("\t %d \t ",*it++);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:7)

由于宏,您使用the built-in comma operator使用func而不是参数分隔符v2.insert(1,((v1).begin(),(v1).end())) ((v1).begin(),(v1).end())。这意味着你真正在做的是v2.insert(1,((v1).end()))

我建议你不要使用宏来“缩短”这样的东西。除了像你一样创造问题之外,它还倾向于使代码更难来阅读,理解和维护。