Я хочу знать, почему передача v.size()
аргументу макроса дает мне ошибку, но если я храню значение во временной переменной и передаю, что вместо этого он работает;Макро для аргумента петли
Вот мой код:
#include <stdio.h>
#include <vector>
using namespace std;
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define REP(i,n) FOR(i,0,n-1)
int main(){
int n,x;
vector<int> v;
scanf("%d", &n);
REP(i, n){
scanf("%d", &x);
printf("Size of Vector = %d\n", v.size());
int exists = 0;
REP(j, v.size()){
// Loop executes even when size = 0
if (v[j] == x){
exists = 1;
break;
}
}
if (!exists)
v.push_back(x);
}
return 0;
}
Однако это работает:
int size = v.size();
REP(j, size){
if (v[j] == x){
exists = 1;
break;
}
}
Хорошая работа! Теперь это кажется таким очевидным. Действительно хороший вопрос, он будет идеально подходит для интервью. – yasen
Спасибо. Вместо этого я просто набираю текст на ** int ** '#define REP (i, n) FOR (i, 0, (int) n-1)' –