C++20 <numeric>数值计算全部函数 tcy

2024-03-20 08:58

本文主要是介绍C++20 <numeric>数值计算全部函数 tcy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.说明:数值算法属于泛型算法,要求输入迭代器,输出数据则使用输出迭代器表示目的位置除iota外,数值算法都提供了重载版本(即用谓词代替默认运算符的自定义版本)
1.说明:数值算法属于泛型算法,要求输入迭代器,输出数据则使用输出迭代器表示目的位置除iota外,数值算法都提供了重载版本(即用谓词代替默认运算符的自定义版本) 2.Functions   iota                    用起始值的连续增量填充单容器   accumulate              单容器求和 reduce                  单容器求和或(应用可调用)与accumulate相似但顺序混乱  transform_reduce        容器1元素乘以容器2元素后求总和(或应用可调用)  inner_product           计算两容器内积(即对应元素的积的和)(或应用可调用)    adjacent_difference     单容器差分=后一个元素-前一个元素    partial_sum             单容器累计和(或应用可调用)a1=v1,a2=v1+v2,a3= v1+v2+v3,...  inclusive_scan    相似partial_sum求累积和(包括当前元素)(或应用可调用)v0=init+e0,v1=v0+e1,v2=v1+e2,v3=v2+e3,...  exclusive_scan    相似partial_sum求累积和(不含当前元素)(或应用可调用)v[0]=init;v[i]=v[i-1]+e[i-1];   transform_inclusive_scan  unary_op函数作用于每个元素后,然后再用binary_op函数累积操作新元素(包含当前值)  transform_exclusive_scan  unary_op函数作用于每个元素后,然后再用binary_op函数累积操作新元素(不含当前值)   gcd               返回两个整数的最大公约数   lcm               返回两个整数的最小公倍数  midpoint          两个数字或指针之间的中点 (C++20)   

 1.accumulate-单容器求和 

 函数:T accumulate( InputIt first, InputIt last, T init );                                //使用+运算符T accumulate( InputIt first, InputIt last, T init,BinaryOperation op );//使用指定二元操作用途:求容器中[first,last)元素的总和返回:1)给定值与给定范围内的元素之和2)给定范围的左折结果op原理:result=*first+*(first+1)+...;注意:执行左折为正确折叠必将参数顺序颠倒到二进制运算符,并使用反向迭代器
2.实例:accumulate 
#include <iostream>
#include <vector>
#include <numeric>
#include <string>
#include<cassert>using namespace std;int main(){vector<int> v{ 1, 2, 3, 4, 5};int sum = accumulate(v.begin(), v.end(), 100);assert(sum == 115);//=100+1+2+3+4+5int product = accumulate(v.begin(), v.end(), 100, multiplies<int>());assert(product == 100*1*2*3*4*5);auto dash_fold = [](string a, int b) {return move(a) + '-' + to_string(b);};// 从第一个元素开始string s = accumulate(next(v.begin()), v.end(),to_string(v[0]), dash_fold);assert(s == string("1-2-3-4-5"));// 右折使用反向迭代器:从最后一个元素开始string rs = accumulate(next(v.rbegin()), v.rend(),to_string(v.back()), dash_fold);assert(rs == string("5-4-3-2-1")); 
}

2.adjacent_difference差分=后一个元素-前一个元素 

函数:OutputIt adjacent_difference( InputIt first, InputIt last,OutputIt d_first );//版本1用元素类型的-运算符ForwardIt2 adjacent_difference( policy, ForwardIt1 first, ForwardIt1 last,ForwardIt2 d_first );OutputIt adjacent_difference( InputIt first, InputIt last,  OutputIt d_first, BinaryOperation op );//版本2用指定二元操作ForwardIt2 adjacent_difference(policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first, BinaryOperation op );用途:差分rst[0]=*first,rst[1]=*(first+2)-*(first+1),rst[2]=*(first+3)-*(first+2),...笔记:如果first == last,此函数无效,仅返回d_first
实例6:adjacent_difference差分
#include <numeric>
#include <vector>
#include <array>
#include <iostream>int main(){std::vector<int> vec{ 2, 4, 6, 8, 10,12 };std::adjacent_difference(vec.begin(), vec.end(), vec.begin());for (auto v : vec)std::cout << v << ' ';std::cout << '\n';//2 2 2 2 2 2==(2,6-4,8-6,10-8,12-10)std::array<int, 6> arr{ 1 };adjacent_difference(begin(arr), std::prev(end(arr)), std::next(begin(arr)), std::plus<> {});copy(begin(arr), end(arr), std::ostream_iterator<int> {std::cout, " "});//1 1 2 3 5 8//==(1,1,1+1,1+2,2+3,3+5)
}

 3.std::exclusive_scan 累积和但不包括当前元素(或应用可调用)         

1.1.函数:OutputIt exclusive_scan( InputIt first, InputIt last,OutputIt d_first, T init, [BinaryOperation binary_op ]);ForwardIt2 exclusive_scan( policy, ForwardIt1 first, ForwardIt1 last,ForwardIt2 d_first, T init, [BinaryOperation binary_op] );1.2.用途:累积和但不包括当前元素(或应用可调用) 
1.3.原理:v[0]=init;v[i]=v[i-1]+e[i-1];
1.4.参数:first, last -  求和元素的范围d_first -      目标范围的开始;可能等于firspolicy -       执行策略init -            初始值 必须要有binary_op-  二元函数
实例:
#include <functional>           
#include <iostream>           
#include <iterator>           
#include <numeric> 
#include <vector>           using namespace std;void test() {std::vector<long long> data{ 2, 10, 5, 2, 1, 2, 10, 5 };std::cout << "1.1.exclusive sum: ";std::exclusive_scan(data.begin(), data.end(),std::ostream_iterator<long long>(std::cout, " "),0, std::plus<long long>{});std::cout << "\n\n1.2.exclusive sum: ";long longinit=0,v=0;for (auto i = 0; i < data.size(); ++i){if (i == 0)v = init;elsev = v + data[i-1];cout << v << " ";}cout << endl;std::cout << "\n\n2.1.exclusive product: ";std::exclusive_scan(data.begin(), data.end(),std::ostream_iterator<long long>(std::cout, " "), 1, std::multiplies<long long>{});std::cout << "\n2.2.inclusive product: ";init = 1, v = 0;for (auto i = 0; i < data.size(); ++i){if (i == 0)v = init;elsev = v * data[i - 1];cout << v << " ";}cout << endl;std::cout << "\n\n3.1.exclusive divides: ";std::exclusive_scan(data.begin(), data.end(),std::ostream_iterator<long long>(std::cout, " "), 100000, std::divides<long long>{});std::cout << "\n3.2.inclusive divides: ";init = 100000, v = 0;for (auto i = 0; i < data.size(); ++i){if (i == 0)v = init;elsev = v / data[i - 1];cout << v << " ";}cout << endl;  
}int main() {test();
}输出:
1.1.exclusive sum: 0 2 12 17 19 20 22 32
1.2.exclusive sum: 0 2 12 17 19 20 22 322.1.exclusive product: 1 2 20 100 200 200 400 4000
2.2.inclusive product: 1 2 20 100 200 200 400 40003.1.exclusive divides: 100000 50000 5000 1000 500 500 250 25
3.2.inclusive divides: 100000 50000 5000 1000 500 500 250 25

4.gcd 最大公约数 

函数:constexpr std::common_type_t<M, N> gcd(M m, N n);用途:计算整数m和n的最大公约数返回:如果m和n均为零,则返回零。否则,返回|m|和的最大公约数|n|注意:如M或N不是整数,或一个[cv]bool则程序格式错误如m或n不能表示为类型std :: common_type_t < M,N >的值则行为未定义
实例12:gcd最大公约数
#include <iostream>
#include <type_traits>
#include <numeric>
#include<cassert>template <class T>struct Number { T v; };template <class T, class U>
Number<typename std::common_type<T, U>::type> operator+(const Number<T>& lhs,const Number<U>& rhs){ return { lhs.v + rhs.v };}using namespace std;int main(){//测试x1,y1的共同的类型Number<int> x1 = { 1 }, x2 = { 2 };Number<double> y1 = { 2.3 }, y2 = { 3.5 };auto v = x1.v + y2.v;assert(string(typeid(v).name()) == string("double"));assert(x1.v + x2.v == 3);assert(x1.v + y1.v == 3.3);//测试最大公约数constexpr int p{ 2 * 2 * 3 };constexpr int q{ 2 * 3 * 3 };static_assert(2 * 3 == std::gcd(p, q));
}

5.inclusive_scan求累积和 (或应用可调用)            

1.1.函数:OutputIt inclusive_scan( InputIt first,InputIt last, OutputIt d_first );  //std::plus<>()   OutputIt inclusive_scan( InputIt first, InputIt last, OutputIt d_first,BinaryOperation binary_op, [T init] ); ForwardtIt2 inclusive_scan(policy, ForwardIt1 first, ForwardIt1 last,ForwardIt2 d_first );//std::plus<>()                                          ForwardIt2 inclusive_scan(policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first, BinaryOperation binary_op,[T init] );           1.2.用途:求累积和 (或应用可调用)         
1.3.参数:first, last -  求和元素的范围   d_first -      目标范围开始可等于first   policy -       执行策略   init -            初始值(可选)   binary_op-  二元函数1.4.原理:v0=init+e0,v1=v0+e1,v2=v1+e2,v3=v2+e3,...
1.5.注意:不应修改任何迭代元素,否则行为未知
实例:   
#include <functional>           
#include <iostream>           
#include <iterator>           
#include <numeric> 
#include <vector>           using namespace std;void test1() {std::vector<long long> data{ 10000, 10, 5, 2, 1, 2, 10, 5 };std::cout << "\n1.11.inclusive sum: ";std::inclusive_scan(data.begin(), data.end(),std::ostream_iterator<long long>(std::cout, " "));cout << "\n1.12.inclusive sum: ";long long tmp = 0;for(auto  i = 0; i < 8; ++i){if (i == 0)tmp=data[i];elsetmp=tmp+ data[i];cout << tmp << " ";}cout << endl;std::cout << "\n1.21.inclusive product: ";std::inclusive_scan(data.begin(), data.end(), std::ostream_iterator<long long>(std::cout, " "),std::multiplies<>{});cout << "\n1.22.inclusive product: ";tmp = 0;for(auto  i = 0; i < 8; ++i){if (i == 0)tmp = data[i];elsetmp = tmp * data[i];cout << tmp << " ";}cout << endl;std::cout << "\n1.31.inclusive divides: ";std::inclusive_scan(data.begin(), data.end(),std::ostream_iterator<long long>(std::cout, " "),std::divides<>{});cout << "\n1.32.inclusive divides: ";tmp = 0;for(auto  i = 0; i < 8; ++i){if (i == 0)tmp = data[i];elsetmp = tmp /data[i];cout << tmp << " ";}cout << endl;
}
void test2() {std::vector<long long> data{ 10, 10, 5, 2, 1, 2, 10, 5 };std::cout << "\n2.11.inclusive sum: ";std::inclusive_scan(data.begin(), data.end(),std::ostream_iterator<long long>(std::cout, " "), std::plus<long long>(), 10);cout << "\n2.12.inclusive sum: ";long long tmp = 10;for (auto i = 0; i < 8; ++i){tmp += data[i];cout << tmp << " ";}cout << endl;std::cout << "\n2.21.inclusive product: ";std::inclusive_scan(data.begin(), data.end(),std::ostream_iterator<long long>(std::cout, " "),std::multiplies<>{}, 10);cout << "\n2.22.inclusive product: ";tmp = 10;for (auto i = 0; i < 8; ++i){tmp = tmp * data[i];cout << tmp << " ";}cout << endl;std::cout << "\n2.31.inclusive divides: ";std::inclusive_scan(data.begin(), data.end(), std::ostream_iterator<long long>(std::cout, " "), std::divides<>{}, 10000);cout << "\n2.32.inclusive divides: ";tmp = 10000;for (auto i = 0; i < 8; ++i){tmp = tmp / data[i];cout << tmp << " ";}cout << endl;   
}int main() {test1();test2();
}输出:
1.11.inclusive sum: 10000 10010 10015 10017 10018 10020 10030 10035
1.12.inclusive sum: 10000 10010 10015 10017 10018 10020 10030 100351.21.inclusive product: 10000 100000 500000 1000000 1000000 2000000 20000000 100000000
1.22.inclusive product: 10000 100000 500000 1000000 1000000 2000000 20000000 1000000001.31.inclusive divides: 10000 1000 200 100 100 50 5 1
1.32.inclusive divides: 10000 1000 200 100 100 50 5 12.11.inclusive sum: 20 30 35 37 38 40 50 55
2.12.inclusive sum: 20 30 35 37 38 40 50 552.21.inclusive product: 100 1000 5000 10000 10000 20000 200000 1000000
2.22.inclusive product: 100 1000 5000 10000 10000 20000 200000 10000002.31.inclusive divides: 1000 100 20 10 10 5 0 0
2.32.inclusive divides: 1000 100 20 10 10 5 0 0

 6.inner_product计算两个范围元素的内积

 函数:T inner_product( InputIt1 first1, InputIt1 last1, InputIt2 first2, T init );//版本1使用元素类型的*和+T inner_product( InputIt1 first1, InputIt1 last1, InputIt2 first2, T init,BinaryOperation1 op1,BinaryOperation2 op2 );用途:返回两序列内积(即对应元素的积的和),和的初值由init指定的值开始类型要求:--InputIt1, InputIt2必须满足LegacyInputIterator的要求--ForwardIt1, ForwardIt2必须满足LegacyForwardIterator的要求--T必须满足CopyAssignable和CopyConstructible的要求
实例:std::inner_product
#include <iostream>
#include <numeric>
#include <vector>using namespace std;int main(){std::vector<int> v1{ 0, 1, 2, 3, 4 };std::vector<int> v2{ 5, 4, 2, 3, 1 };int r1 = std::inner_product(v1.begin(), v1.end(), v2.begin(), 0);std::cout << "Inner product of v1 and v2: " << r1 << '\n';//0+0*5+1*4+2*2+3*3+4*1=21int r2 = std::inner_product(v1.begin(), v1.end(), v2.begin(), 0,std::plus<>(), std::equal_to<>());std::cout << "Number of pairwise matches between v1 and v2: " << r2 << '\n';//2 
}

7.iota-单容器插入递增数据 

实例1:iota 
#include <iostream>
#include <list>
#include <numeric>int main() {std::list<int> lst(7);std::iota(lst.begin(), lst.end(), -3);//lst=-3 -2 -1 0 1 2 3 for (auto n : lst) std::cout << n << ' ';std::cout << '\n';
}

8.lcm 两个整数的最小公倍数 

函数:constexpr std::common_type_t<M, N> lcm(M m, N n);     用途:计算整数m和的最小公倍数n  参数:m, n -整数值返回:如果m或n为零,则返回零。否则,返回|m|和的最小公倍数|n|  备注:如M或N不是整数类型,或一个(cv)bool,则程序格式错误  如|m|和|n|不能std :: common_type_t < M,N >行为是未定义  
2.实例:     #include <numeric>     int main() {     constexpr int p {2 * 2 * 3};constexpr int q {2 * 3 * 3};     static_assert(2 * 2 * 3 * 3 == std::lcm(p, q));     }  

9.midpoint   两个数字或指针之间的中点 (C++20) 

 函数: constexpr T midpoint(T a, T b) noexcept;(C++20)  返回(a+b)/2 如为奇数则四舍五入constexpr T* midpoint(T* a, T* b);           (C++20)  返回x[i+(j-i)/2]用途:计算整数,浮点数或指针a和的中点b 参数:a, b-整数浮点数或指针值注意:如果a并且b不指向同一数组对象的元素,则行为是不确定的原理:可以简单地实现为return a + (b - a) / 2; 这种实现不能保证是可移植
实例14:std::midpoint
#include <cstdint>     
#include <limits>     
#include <numeric>     
#include <iostream>     int main() {     std::uint32_t a = std::numeric_limits<std::uint32_t>::max();     std::uint32_t b = std::numeric_limits<std::uint32_t>::max() - 2;     std::cout << "a: " << a << '\n'    //4294967295 << "b: " << b << '\n'    // 4294967293<< "错误溢出=" << (a + b) / 2 << '\n'             //2147483646    << "正确= " << std::midpoint(a, b) << "\n\n"; //4294967294     auto on_pointers = [](int i, int j) {     char const* text = "0123456789";     char const* p = text + i;     char const* q = text + j;     std::cout << "std::midpoint('" << *p << "', '" << *q << "'): '"     << *std::midpoint(p, q) << "'\n";     };     on_pointers(2, 4);  //'3'    on_pointers(2, 5);  //'3'    on_pointers(5, 2);  //'4'   on_pointers(2, 6);  //'4'   
}     

10.partial_sum   计算一系列元素的部分和 

 函数:OutputIt partial_sum( InputIt first, InputIt last, OutputIt d_first );//版本用元素类型的+运算符OutputIt partial_sum( InputIt first, InputIt last, OutputIt d_first,BinaryOperation op );//版本2用指定二元操作用途:新序列每个新元素值都等于输入范围中当前位置和之前位置上所有元素之和原理:*(d_first)   = *first;*(d_first+1) = *first + *(first+1);*(d_first+2) = *first + *(first+1) + *(first+2);*(d_first+3) = *first + *(first+1) + *(first+2) + *(first+3);...    
实例7:std::partial_sum
#include <numeric>
#include <vector>
#include <iostream>
#include <iterator>int main(){std::vector<int> v = { 2, 2, 2, 2, 2 }; std::partial_sum(v.begin(), v.end(),std::ostream_iterator<int>(std::cout, " "));std::cout << '\n';//2 4 6 8 10==(2,2+2,2+4,2+6,2+8)v.assign({ 1,2,3,4,5,6 });std::partial_sum(v.begin(), v.end(), v.begin(), std::multiplies<int>());for (auto n : v)std::cout << n << " ";std::cout << '\n';//1 2 6 24 120 720==(1,1*2,1*2*3,1*2*3*4,1*2*3*4*5,1*2*3*4*5*6)
}

11.reduce-单容器求和 与std :: accumulate相似,但顺序混乱 

函数:typename std::iterator_traits<InputIt>::value_type reduce([policy,] InputIt first, InputIt last);              //相当init=0,binary_op=plus<>()T reduce([policy,] InputIt first, InputIt last, T init); //相当binary_op=plus<>()T reduce([policy,] InputIt first, InputIt last, T init, BinaryOp binary_op);用途:其行为类似于std :: accumulate,只是范围的元素可以按任意顺序分组和重新排列参数:- 广义和的初始值原理:op(GSUM(op,b 1,...,bk)注意:如果行为binary_op不是关联性或可交换性,则行为是不确定的。如binary_op修改[first,last)任何元素或使迭代器无效,则该行为未定义包括结束迭代器
2.实例:reduce 和上例accumulate完全相同
#include <iostream>
#include <numeric>
#include <vector>
#include<string>
#include<cassert>using namespace std;int main(){vector<int> v{ 1, 2, 3, 4, 5 };int sum = reduce(v.begin(), v.end(), 100);cout << "sum=" << sum << endl;//assert(sum == 115);//=100+1+2+3+4+5int product = reduce(v.begin(), v.end(), 100, multiplies<int>());assert(product == 100 * 1 * 2 * 3 * 4 * 5);auto dash_fold = [](string a, int b) {return move(a) + '-' + to_string(b); };string s = reduce(next(v.begin()), v.end(), to_string(v[0]), dash_fold);assert(s == string("1-2-3-4-5"));string rs = reduce(next(v.rbegin()), v.rend(), to_string(v.back()), dash_fold);assert(rs == string("5-4-3-2-1"));
}

 12.transform_exclusive_scan             

1.1.说明:同std::transform_exclusive_scan类似
1.2.用途:unary_op函数作用于每个元素后,然后再用binary_op函数累积操作新元素(不含当前值)2.实例:参考transform_exclusive_scan

13.std::transform_inclusive_scan           

1.1.函数:OutputIt transform_inclusive_scan( InputIt first, InputIt last, OutputIt d_first,BinaryOperation binary_op, UnaryOperation unary_op,[T init] );ForwardIt2 transform_inclusive_scan(policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first,BinaryOperation binary_op, UnaryOperation unary_op, [T init] );1.2.用途:unary_op函数作用于每个元素后,然后再用binary_op函数累积操作新元素(包含当前值)
2.实例:
#include <functional>
#include <iostream>
#include <iterator>
#include <numeric>
#include <vector>int main(){std::vector data{ 3, 1, 4, 1, 5, 9, 2, 6 };auto times_10 = [](int x) { return x * 10; };std::cout << "10 times exclusive sum: ";std::transform_exclusive_scan(data.begin(), data.end(),std::ostream_iterator<int>(std::cout, " "),0, std::plus<int>{}, times_10);std::cout << "\n10 times inclusive sum: ";std::transform_inclusive_scan(data.begin(), data.end(),std::ostream_iterator<int>(std::cout, " "),std::plus<int>{}, times_10);
}输出://10 times exclusive sum : 0 30 40 80 90 140 230 250
//10 times inclusive sum : 30 40 80 90 140 230 250 310

14.transform_reduce-容器1元素乘以容器2元素后求总和   应用可调用的,然后减少混乱  

 函数:T transform_reduce(InputIt1 first1, InputIt1 last1, InputIt2 first2, T init);// std::plus<>(), std::multiplies<>()默认std :: inner_product并行化T transform_reduce(InputIt1 first1, InputIt1 last1, InputIt2 first2,T init, binary_op1, binary_op2);T transform_reduce(InputIt first, InputIt last,T init, BinaryOp binop, UnaryOp unary_op);T transform_reduce(policy, ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, T init);T transform_reduce(policy,ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2,T init, BinaryOp1 binary_op1, BinaryOp2 binary_op2);T transform_reduce(policy,ForwardIt first, ForwardIt last,T init, BinaryOp binary_op, UnaryOp unary_op);参数:binary_op二元函数;unary_op元函数说明:4-6功能同1-3只是多个并行化参数选择注意:任何函数修改迭代器元素(包括end)行为是未定义的

 

2.实例:transform_reduce
#include <iostream>
#include <numeric>
#include <vector>using namespace std;int main(){vector<int> v{ 1, 2, 3, 4, 5 };std::vector<int> v1 = { 10, 20, 30 };std::vector<int> v2 = { 1, 2, 3};auto product = transform_reduce(v1.begin(), v1.end(),v2.begin(), 1000);std::cout <<"product="<< product << endl;//1000+10*1+2*20+30*3=1140product = transform_reduce(v1.begin(), v1.end(), v2.begin(), 1000,std::plus<>(), std::multiplies<>());std::cout << "product=" << product << endl;//1000+10*1+2*20+30*3=1140auto less_three = [](int x) {return x+10; };product = transform_reduce(v2.begin(), v2.end(), 1000, std::plus<>(), less_three);std::cout << "product=" << product << endl;//1000+(1+10)+(2+10)+(3+10)=1036
}

 

这篇关于C++20 <numeric>数值计算全部函数 tcy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828932

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解