【发布时间】:2015-07-21 14:32:19
【问题描述】:
我在 SPOJ 上解决了一个名为 FASHION 的简单问题……很简单。我只是想了解迭代器。但后来我遇到了一个特殊的问题。
这是我的代码,
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
int hotMax(vector<int> &, vector<int> &);
int main()
{
int iter,m_f;
scanf("%d", &iter);
vector<int> a,b;
while(iter--){
scanf("%d", &m_f);
a.resize(m_f);
b.resize(m_f);
vector<int>::iterator it;
for(it = a.begin(); it != a.end(); it++){
scanf("%d", it);
}
for(it = b.begin(); it != b.end(); it++){
scanf("%d", it);
}
printf("%d\n", hotMax(a,b));
}
return 0;
}
int hotMax(vector<int> &a, vector<int> &b){
std::sort(a.begin(), a.end());
std::sort(b.begin(), b.end());
int result = 0;
vector<int>::iterator it1,it2;
for(it1 = a.begin(),it2 = b.begin(); it1 != a.end(); it1++,it2++){
result+= (*it1) * (*it2);
}
return result;
}
我在代码块上收到此警告,
/home/harshal/c++ 教程/SAMER08F/main.cpp|22|警告:格式“%d”需要“int*”类型的参数,但参数 2 的类型为“std::vector::iterator {aka __gnu_cxx:: __normal_iterator >} /home/harshal/c++ 教程/SAMER08F/main.cpp|25|警告:格式“%d”需要“int*”类型的参数,但参数 2 的类型为“std::vector::iterator {aka __gnu_cxx:: __normal_iterator >}' [-Wformat=]|这些对应于
scanf("%d", it);
但随后它在代码块中完美运行,
它在 ideone 和 SPOJ 上都给出了 SIGILL。
当我将 scanf 替换为 cin>> *it 时,它可以在 SPOJ 和 ideone 上完美运行。
如果您能给我一些见解,我将不胜感激。我试图将 it 放在 scanf 中,因为它是一种指向向量的通用指针。
提前致谢。
【问题讨论】:
标签: c++ c++11 vector stl runtime-error