常用的c++功能和函数

1、计算iou

定义

float iou(BBox_struct sign_box, BBox_struct box2)
{
    int x1 = std::max(sign_box.x, box2.x);
    int y1 = std::max(sign_box.y, box2.y);
    int x2 = std::min((sign_box.x + sign_box.w), (box2.x + box2.w));
    int y2 = std::min((sign_box.y + sign_box.h), (box2.y + box2.h));
    if ((x2 - x1) < 0 || (y2 - y1) < 0)
    {
        return 0.0;
    }
    float over_area = (x2 - x1) * (y2 - y1);
    float iou = over_area / (sign_box.w * sign_box.h + box2.w * box2.h - over_area);
    return iou;
}

调用

float t_iou = iou(crop_sign_box, text_box);

2、判断一个字符串是否包含另一个子字符串

定义

bool contains_str(std::string big, std::string small)
{
    std::string::size_type idx;
    idx = big.find(small);
    if (idx == std::string::npos)
    {
        return false;
    }
    else
        return true;
}

调用

contains_str(09000A”, "09")

3、判断一个数组是否包含某个字符串

定义

bool contains_arr(std::string arr[], std::string d)
{
    for (int i = 0; i < 7; i++)
    {
        if (arr[i] == d)
        {
            return true;
        }
    }
    return false;
}

调用

std::string warning_class[7] = { "08200D","071002","074001","072004","07200C","07200B","073002" };
contains_arr(warning_class,090002)

四、c++数组

在c++中的数组有点类似python中的列表。
数组数据结构:可以存储一个固定大小的相同类型元素的顺序集合。

1、声明数组

double balance[10];

2、初始化数组

double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

3、访问数组元素

double salary = balance[9];

4、二维数组的初始化和访问

int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
int val = a[2][3];

5、传递数组给函数

通过指定不带索引的数组名称来给函数传递一个指向数组的指针

#include <iostream>
using namespace std;
 
// 函数声明
double getAverage(int arr[], int size);
 
int main ()
{
   // 带有 5 个元素的整型数组
   int balance[5] = {1000, 2, 3, 17, 50};
   double avg;
 
   // 传递一个指向数组的指针作为参数
   avg = getAverage( balance, 5 ) ;
 
   // 输出返回值
   cout << "平均值是:" << avg << endl; 
    
   return 0;
}

6、从函数返回数组

参考菜鸟教程
参考https://blog.csdn.net/lishun1422840684/article/details/78773203
c++中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现

#include<iostream>
 
using namespace std;
 
typedef int arrT[10];//类型别名,表示含有10个整形的数组
//using arrT = int[10]; //arrT的等价声明,c++11版本新加的
 
int arry[10] = {1,3,5,4,5,11,7,13,9,20};
arrT* func()
{
	return &arry;
}
 
int main()
{
    int (*p)[10] =func();
	for(int i=0;i<10;i++)
	{
		cout<<*(*p + i)++<<" "<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值