C++ 语言记

这篇博客详细讨论了C++编程中的若干关键点,包括动态生成二维数组、函数内二维数组处理、nan和inf的判断、size_t的使用以及模板类的声明与实现问题。此外,还介绍了Makefile的使用技巧,如引用、通配符和自动变量。讲解了Valgrind在检测内存泄漏中的作用,以及智能指针std::unique_ptr和std::shared_ptr的差异。最后,分享了gdb调试工具的使用方法,包括设置断点、查看源代码和运行控制。
摘要由CSDN通过智能技术生成

C++ 语言记

动态生成二维数组

// 生成一个mxn的矩阵
int **B, *Bstorage, i;
Bstorage = (int *)malloc(m * n * sizeof(int));
B = (int **) malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
	B[i] = &Bstorage[i*n];

函数内传入二级指针, 函数内动态生成二维数组

void test(int **&A) {
  A = new int* [2];
  A[0] = new int [2];
  A[1] = new int [2];
  A[0][0] = 110;
}
int **B;
test(B);

二维数组传入函数

template <class T>
T* vector_multiple_matrix(T* vec, T** matrix, int row, int column) {
  T* result = new T [column];
  for (int i = 0; i < column; i++) {
    result[i] = 0.0;
    for (int j = 0; j < row; j++) {
      result[i] += (vec[j] * matrix[j][i]);
    }
  }
  return result;
}
double A[2] = {2, 2,};
double B[2][3] = {
  {2, 4, 1}, {1, 2, 1}};
double** p = new double* [2];
p[0] = B[0];
p[1] = B[1];   //调用时需要将二维数组转化为二级指针
double* C = DataUtils<double>::vector_multiple_matrix(A, p, 2, 3);
cout << C[0] << " " << C[1] << " " << C[2] << endl;

nan和inf的判断

  1. int isfinite(x) ,判断x是否有限,是返回1,其它返回0;
  2. int isnormal(x),判断x是否为一个数(非inf或nan),是返回1,其它返回0;
  3. int isnan(x),当x时nan返回1,其它返回0;
  4. int isinf(x) ,当x是正无穷是返回1,当x是负无穷时返回-1,其它返回0。有些编译器不区分。
    在这里插入图片描述## 获取类型最大值
#include <limits>
#include <cstddef>
#include <iostream>
int main()
{
    std::cout << "short: " << std::dec << std::numeric_limits<short>::max()
              << " or " << std::hex << std::showbase << std::numeric_limits<short>::max() << '\n'
              << "int: " << std::dec << std::numeric_limits<int>::max()
              << " or " << std::hex << std::numeric_limits<int>::max() << '\n' << std::dec
              << "streamsize: " << std::dec << std::numeric_limits<std::streamsize>::max()
              << " or " << std::hex << std::numeric_limits<std::streamsize>::max() << '\n'
              << "size_t: " << std::dec << std::numeric_limits<std::size_t>::max()
              << " or " << std::hex << std::numeric_limits<std::size_t>::max() << '\n'
              << "float: " << std::numeric_limits<float>::max()
              << " or " << std::hexfloat << std::numeric_limits<float>::max() << '\n'
              << "double: "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值