c++ - 调用 '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;
}
解决方案
由于宏,您可以v2.insert(1,((v1).begin(),(v1).end()))
在内部((v1).begin(),(v1).end())
使用内置逗号运算符而不是参数分隔符。这意味着你真正在做的是v2.insert(1,((v1).end()))
我建议你不要使用宏来“缩短”这样的事情。除了像您一样产生问题外,它还往往使代码更难阅读、理解和维护。
推荐阅读
- scala - 将带有参数的案例类作为案例类转换为 Avro 消息以发送到 Kafka
- angular - 在结构指令中创建标签
- php - 使用 CodeIgniter 时 PHPMailer 不起作用
- python - 根据分组中的键编辑熊猫数据框字段
- c# - C# 的 HttpClient 可以接受带有路径的 cookie 吗?
- javascript - 将模态从一页重新加载到另一页
- php - 如何在php mysql中显示商店名称而不是分支名称
- c# - Application.SetCompatibleTextRenderingDefault(false); 时出现运行时错误 已设置
- python - 如何使用 numpy 创建一个二维范围数组
- google-cloud-platform - 数据流模板 Cloud Pub/Sub 主题与订阅 BigQuery