我试图擦除重复的向量元素.首先,我对元素进行排序,然后查找重复项.我重载了sort函数但是我不确定如何重载以擦除部分.
class cp_data
{
public:
int num;
char name;
cp_data(int a, char b)
{
num = a;
name = b;
}
};
int main()
{
std::vector<cp_data> data;
cp_data data1(1, 'a');
cp_data data2(2, 'b');
cp_data data3(1, 'a');
cp_data data4(2, 'b');
data.push_back(data1);
data.push_back(data2);
data.push_back(data3);
data.push_back(data4);
std::sort( data.begin(), data.end(), []( const cp_data& lhs, const cp_data& rhs )
{
return lhs.num< rhs.num;
});
data.erase(unique(data.begin(), data.end()), data.end());
system("pause");
}
Run Code Online (Sandbox Code Playgroud)
此代码给出以下错误.
错误C2672'operator __surrogate_func':没有匹配的重载函数错误C2893无法专门化函数模板'unknown-type std :: equal_to :: operator()(_ Ty1 &&,_ Ty2 &&)const'
当我在没有-std = gnu ++ 11开关的情况下编译时,这个循环工作正常.如果我使用-std = gnu ++ 11进行编译,则会出现以下错误:
no match for call to '(__gnu_cxx::__normal_iterator<const float*, std::vector<float> >) (const float&, const float&)' if (!bool(__binary_pred(*__first1, *__first2)))
Run Code Online (Sandbox Code Playgroud)
我的代码:
for (auto it_A = std::begin(vector_A); it_A != std::end(vector_A); it_A += 4)
{
bool found_in_B = false;
for (auto it_B = std::begin(vector_B); !found_in_B && it_B != std::end(vector_B); it_B += 4)
{
found_in_B = std::equal(it_A, it_A + blockSize, it_B, it_B + blockSize);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个hi带有非默认构造函数的类,它带有两个参数.我正在尝试构造一个his 数组:
class hi {
public:
hi(int a, int b){};
};
int main() {
hi *hello;
int number_of instance = 5;
hello = new hi[number_of_instance]; // (1)
}
Run Code Online (Sandbox Code Playgroud)
如何hi::hi(int,int)在标记的线上调用(1)?