首页 > 解决方案 > 调用 'std::vector 没有匹配的函数::insert' 使用宏时

问题描述

我编写了一个对向量执行一些操作的代码,其中我定义了一个宏:

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

...并使用该宏进行向量插入v2.insert(1, all(v1))

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

没有匹配函数调用'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;
}

标签: c++macros

解决方案


由于宏,您可以v2.insert(1,((v1).begin(),(v1).end()))在内部((v1).begin(),(v1).end())使用内置逗号运算符而不是参数分隔符。这意味着你真正在做的是v2.insert(1,((v1).end()))

我建议你不要使用宏来“缩短”这样的事情。除了像您一样产生问题外,它还往往使代码更难阅读、理解和维护。


推荐阅读