我试图找到某个问题的解决方案(给定n个数字的数组A []和另一个数字x,确定A中是否存在两个元素,其总和恰好是x。) 这是我的解决方案:
#include <iostream>
#include <vector>
#include <set>
#include <string>
#include "stdio.h"
using std::cout;
using std::vector;
bool hasPairWithSum(vector<int> data, int sum);
int main()
{
int testCases;
std::cin >> testCases;
int arrSize;
int sum;
std::vector<std::string> results;
vector<int> vec;
for (int i = 0; i < testCases; i++) {
std::cin >> arrSize;
std::cin >> sum;
for (int j = 0; j < arrSize; j++)
{
int tmp;
std::cin >> tmp;
vec.push_back(tmp);
}
bool result = hasPairWithSum(vec, sum);
if (result)
results.push_back("YES");
else results.push_back("NO");
}
for (int k = 0; k < results.size(); k++)
cout << results[k]<< std::endl;
return 0;
}
bool hasPairWithSum(vector<int> data, int sum) {
std::set<int> compl;
for (int j = 0; j < data.size(); j++) {
int currentCompl = sum - data[j];
if (compl.find(data[j]) != compl.end())
return true;
compl.insert(currentCompl);
}
return false;
}
我正在使用c ++。在本地它工作正常,但网站在线compilator(它使用g ++ 5.4)它给出以下错误:
prog.cpp: In function 'bool hasPairWithSum(std::vector, int)':
prog.cpp:45:21: error: expected class-name before ';' token
std::set compl;
^
prog.cpp:48:12: error: expected primary-expression before '.' token
if (compl.find(data[j]) != compl.end())
^
prog.cpp:48:35: error: expected primary-expression before '.' token
if (compl.find(data[j]) != compl.end())
^
prog.cpp:50:8: error: expected primary-expression before '.' token
compl.insert(currentCompl);
^
任何人都知道我如何修改我的解决方案以使用g ++编译? 谢谢!
答案 0 :(得分:4)
问题是compl
是C ++关键字。使用不同的标识符。
答案 1 :(得分:4)
你正在遇到一种鲜为人知的拼写运算符的替代方法。对于世界上的某些键盘,某些特殊键很难输入,因此运算符的名称与更常规的运算符具有相同的含义(并且解析相同)。大多数代码都不使用它们。
以下是解析器知道的备用标记列表:
and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq
compl是拼写〜的另一种方式,是按位赞美运算符。
只需将您的变量重命名为其他内容