C++ STL—resize,自定义类型,没有合适的默认构造函数可用????

问题: 在使用STL容器盛放自定义数据类型时,会报错:没有合适的默认构造函数可用?????

例子:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

class person
{
public:
	person(string name,int age)
	{
		this->m_name = name;
		this->m_age = age;
	}
	string m_name;
	int m_age;
};
class mycopmera
{
public:
	bool operator()(const person &p1, const person &p2)
	{
		return p1.m_age < p2.m_age;
	}
};
void fun()
{
	person p1("a", 12);
	person p2("b", 13);
	person p3("d", 15);
	person p4("h", 19);
	person p5("c", 14);
	person p6("e", 16);
	person p7("f", 17);
	person p8("g", 18);
	vector<person> va;
	va.push_back(p1);
	va.push_back(p2);
	va.push_back(p3);
	va.push_back(p4);

	vector<person> vb;
	vb.push_back(p5);
	vb.push_back(p6);
	vb.push_back(p7);
	vb.push_back(p8);
	
	vector<person> vc;
	vc.resize(va.size() + vb.size());
	merge(va.begin(), va.end(), vb.begin(), vb.end(), vc.begin(), mycopmera());
	for (vector<person>::iterator it=vc.begin();it!=vc.end();it++)
	{
		cout << (*it).m_name << "  " << (*it).m_age << endl;
	}

	
}
int main()
{
	fun();
	return 0;
}

原因: vc.resize(va.size() + vb.size());在执行这条语句时会调用自定义类的默认构造函数,由于我们自己定义了有参的构造函数,系统就不会再调用默认构造函数,所以在执行这条语句时就会报错,

解决方法: 在public下写入默认构造函数,让其空实现即可。即==添加person() {};==就可以了

默认构造函数就是没有参数的构造函数。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STL(标准模板库)提供了许多算法函数来处理容器。要检查容器中是否存在相同项,可以使用 `std::adjacent_find` 算法函数。 `std::adjacent_find` 函数接受两个迭代器作为参数,并在区间内查找相邻元素相等的第一个位置。如果找到相同项,则返回指向该位置的迭代器;否则,返回指向区间末尾的迭代器。 以下是使用 `std::adjacent_find` 函数检查容器中是否存在相同项的示例代码: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11}; auto it = std::adjacent_find(numbers.begin(), numbers.end()); if (it != numbers.end()) { std::cout << "Found a pair of adjacent elements with the same value: " << *it << std::endl; } else { std::cout << "No adjacent elements with the same value found." << std::endl; } return 0; } ``` 上述代码中,我们创建了一个 `std::vector` 容器 `numbers`,其中包含了一些整数。然后,我们使用 `std::adjacent_find` 函数来查找相邻元素相等的第一个位置。如果找到了相同项,我们输出该值;否则,输出未找到相同项的消息。 注意:`std::adjacent_find` 函数默认使用 `operator==` 进行元素比较,因此容器中的元素类型需要支持相等比较运算符(`==`)。如果需要使用自定义的比较函数,可以提供一个谓词作为额外的参数给 `std::adjacent_find` 函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值