用到的C++的相关知识-----未完待续

news2024/11/27 12:47:14

文章目录

  • 前言
  • 一、vector函数的使用
    • 1.1 构造向量
  • 二、常用函数
    • 2.1 矩阵输出函数
    • 2.2 向量输出函数
    • 2.3 矩阵的使用
    • 2.4
  • 三、new的用法
    • 3.1 内存的四种分区
    • 3.2 new的作用
    • 3.3
    • 3.4
  • 四、
    • 4.1
    • 4.2
    • 4.3
    • 4.4
  • 总结


前言

只是为方便学习,不做其他用途

一、vector函数的使用

有关的文章

  1. C++ vector的用法(整理)
  2. C++中vector的用法详解

1.1 构造向量

	//vector():创建一个空vector
	vector<int> v1 = vector<int>();                         //v1 = []

	//vector(int nSize):创建一个vector,元素个数为nSize
	vector<int> v2 = vector<int>(3);                        //v2 = [0, 0, 0]

	//vector(int nSize,const t& t): 创建一个vector,元素个数为nSize,且值均为t
	vector<int> v3 = vector<int>(3, 10);                    //v3 = [10, 10, 10]

	//vector(const vector&):                                复制构造函数
	vector<int> v4 = vector<int>(v3);                       //v4 = [10, 10, 10]

	//vector(begin,end):  复制[begin,end)区间内另一个数组的元素到vector中
	vector<int> v5 = vector<int>(v4.begin(), v4.end() - 1); //v5 = [10, 10]
	
	vector<vector<int>> v6 = vector<vector<int>>(3, vector<int>(3););    
	//v6 = [[0, 0, 0][0, 0, 0][0, 0, 0]]

二、常用函数

2.1 矩阵输出函数

// 输出矩阵的各个值
void Print(MatrixXd K)
{
	for (int j = 0; j < K.rows(); j++)
	{
		for (int i = 0; i < K.cols(); i++)
		{
			cout << K(j, i) << "  ";
		}
		cout << endl;
	}
}

2.2 向量输出函数

#include <vector>
// 输出向量的各个值
void Print_Vector(vector<double> U)
{
    for (int i = 0; i < U.size(); i++)
    {
        cout << " U_ " << i << " = " << U[i] << endl;
    }
}

2.3 矩阵的使用

eigen库和matlab中对应命令

// A simple quickref for Eigen. Add anything that's missing.
// Main author: Keir Mierle
#include<iostream>
#include <gismo.h>
#include <Eigen/Dense>
using namespace Eigen;
using namespace gismo;
using namespace std;
#include <vector>



int main()
{
	gsMatrix<double, 3, 3> A;               // Fixed rows and cols. Same as Matrix3d.
	Matrix<double, 3, Dynamic> B;         // Fixed rows, dynamic cols.
	Matrix<double, Dynamic, Dynamic> C;   // Full dynamic. Same as MatrixXd.
	Matrix<double, 3, 3, RowMajor> E;     // Row major; default is column-major.
	Matrix3f P, Q, R;                     // 3x3 float matrix.
	Vector3f x, y, z;                     // 3x1 float matrix.
	RowVector3f a, b, c;                  // 1x3 float matrix.
	VectorXd v;                           // Dynamic column vector of doubles
	double s;

	// Basic usage
	// Eigen          // Matlab           // comments
	x.size()          // length(x)        // vector size
	C.rows()          // size(C,1)        // number of rows
	C.cols()          // size(C,2)        // number of columns
	x(i)              // x(i+1)           // Matlab is 1-based
	C(i, j)            // C(i+1,j+1)       //

	A.resize(4, 4);   // Runtime error if assertions are on.
	B.resize(4, 9);   // Runtime error if assertions are on.
	A.resize(3, 3);   // Ok; size didn't change.
	B.resize(3, 9);   // Ok; only dynamic cols changed.

	A << 1, 2, 3,     // Initialize A. The elements can also be
		4, 5, 6,     // matrices, which are stacked along cols
		7, 8, 9;     // and then the rows are stacked.
	B << A, A, A;     // B is three horizontally stacked A's.
	A.fill(10);       // Fill A with all 10's.

	// Eigen                            // Matlab
	MatrixXd::Identity(rows, cols)       // eye(rows,cols)
	C.setIdentity(rows, cols)            // C = eye(rows,cols)
	MatrixXd::Zero(rows, cols)           // zeros(rows,cols)
	C.setZero(rows, cols)                // C = ones(rows,cols)
	MatrixXd::Ones(rows, cols)           // ones(rows,cols)
	C.setOnes(rows, cols)                // C = ones(rows,cols)
	MatrixXd::Random(rows, cols)         // rand(rows,cols)*2-1        // MatrixXd::Random returns uniform random numbers in (-1, 1).
	C.setRandom(rows, cols)              // C = rand(rows,cols)*2-1
	VectorXd::LinSpaced(size, low, high)   // linspace(low,high,size)'
	v.setLinSpaced(size, low, high)        // v = linspace(low,high,size)'


		// Matrix slicing and blocks. All expressions listed here are read/write.
		// Templated size versions are faster. Note that Matlab is 1-based (a size N
		// vector is x(1)...x(N)).
		// Eigen                           // Matlab
		x.head(n)                          // x(1:n)
		x.head<n>()                        // x(1:n)
		x.tail(n)                          // x(end - n + 1: end)
		x.tail<n>()                        // x(end - n + 1: end)
		x.segment(i, n)                    // x(i+1 : i+n)
		x.segment<n>(i)                    // x(i+1 : i+n)
		P.block(i, j, rows, cols)          // P(i+1 : i+rows, j+1 : j+cols)
		P.block<rows, cols>(i, j)          // P(i+1 : i+rows, j+1 : j+cols)
		P.row(i)                           // P(i+1, :)
		P.col(j)                           // P(:, j+1)
		P.leftCols<cols>()                 // P(:, 1:cols)
		P.leftCols(cols)                   // P(:, 1:cols)
		P.middleCols<cols>(j)              // P(:, j+1:j+cols)
		P.middleCols(j, cols)              // P(:, j+1:j+cols)
		P.rightCols<cols>()                // P(:, end-cols+1:end)
		P.rightCols(cols)                  // P(:, end-cols+1:end)
		P.topRows<rows>()                  // P(1:rows, :)
		P.topRows(rows)                    // P(1:rows, :)
		P.middleRows<rows>(i)              // P(i+1:i+rows, :)
		P.middleRows(i, rows)              // P(i+1:i+rows, :)
		P.bottomRows<rows>()               // P(end-rows+1:end, :)
		P.bottomRows(rows)                 // P(end-rows+1:end, :)
		P.topLeftCorner(rows, cols)        // P(1:rows, 1:cols)
		P.topRightCorner(rows, cols)       // P(1:rows, end-cols+1:end)
		P.bottomLeftCorner(rows, cols)     // P(end-rows+1:end, 1:cols)
		P.bottomRightCorner(rows, cols)    // P(end-rows+1:end, end-cols+1:end)
		P.topLeftCorner<rows, cols>()       // P(1:rows, 1:cols)
		P.topRightCorner<rows, cols>()      // P(1:rows, end-cols+1:end)
		P.bottomLeftCorner<rows, cols>()    // P(end-rows+1:end, 1:cols)
		P.bottomRightCorner<rows, cols>()   // P(end-rows+1:end, end-cols+1:end)

		// Of particular note is Eigen's swap function which is highly optimized.
		// Eigen                           // Matlab
		R.row(i) = P.col(j);               // R(i, :) = P(:, i)
	    R.col(j1).swap(mat1.col(j2));      // R(:, [j1 j2]) = R(:, [j2, j1])

	// Views, transpose, etc; all read-write except for .adjoint().
	    // Eigen                           // Matlab
	    R.adjoint()                        // R'
		R.transpose()                      // R.' or conj(R')
		R.diagonal()                       // diag(R)
		x.asDiagonal()                     // diag(x)
		R.transpose().colwise().reverse(); // rot90(R)
	    R.conjugate()                      // conj(R)

	// All the same as Matlab, but matlab doesn't have *= style operators.
	// Matrix-vector.  Matrix-matrix.   Matrix-scalar.
	y = M * x;          R = P * Q;        R = P * s;
	a = b * M;          R = P - Q;      R = s * P;
	a *= M;            R = P + Q;      R = P / s;
	R *= Q;          R = s * P;
	R += Q;          R *= s;
	R -= Q;          R /= s;

	// Vectorized operations on each element independently
	// Eigen                  // Matlab
	R = P.cwiseProduct(Q);    // R = P .* Q
	R = P.array() * s.array();// R = P .* s
	R = P.cwiseQuotient(Q);   // R = P ./ Q
	R = P.array() / Q.array();// R = P ./ Q
	R = P.array() + s.array();// R = P + s
	R = P.array() - s.array();// R = P - s
	R.array() += s;           // R = R + s
	R.array() -= s;           // R = R - s
	R.array() < Q.array();    // R < Q
	R.array() <= Q.array();   // R <= Q
	R.cwiseInverse();         // 1 ./ P
	R.array().inverse();      // 1 ./ P
	R.array().sin()           // sin(P)
		R.array().cos()           // cos(P)
		R.array().pow(s)          // P .^ s
		R.array().square()        // P .^ 2
		R.array().cube()          // P .^ 3
		R.cwiseSqrt()             // sqrt(P)
		R.array().sqrt()          // sqrt(P)
		R.array().exp()           // exp(P)
		R.array().log()           // log(P)
		R.cwiseMax(P)             // max(R, P)
		R.array().max(P.array())  // max(R, P)
		R.cwiseMin(P)             // min(R, P)
		R.array().min(P.array())  // min(R, P)
		R.cwiseAbs()              // abs(P)
		R.array().abs()           // abs(P)
		R.cwiseAbs2()             // abs(P.^2)
		R.array().abs2()          // abs(P.^2)
		(R.array() < s).select(P, Q);  // (R < s ? P : Q)

	// Reductions.
	int r, c;
	// Eigen                  // Matlab
	R.minCoeff()              // min(R(:))
		R.maxCoeff()              // max(R(:))
		s = R.minCoeff(&r, &c)    // [s, i] = min(R(:)); [r, c] = ind2sub(size(R), i);
		s = R.maxCoeff(&r, &c)    // [s, i] = max(R(:)); [r, c] = ind2sub(size(R), i);
		R.sum()                   // sum(R(:))
		R.colwise().sum()         // sum(R)
		R.rowwise().sum()         // sum(R, 2) or sum(R')'
		R.prod()                  // prod(R(:))
		R.colwise().prod()        // prod(R)
		R.rowwise().prod()        // prod(R, 2) or prod(R')'
		R.trace()                 // trace(R)
		R.all()                   // all(R(:))
		R.colwise().all()         // all(R)
		R.rowwise().all()         // all(R, 2)
		R.any()                   // any(R(:))
		R.colwise().any()         // any(R)
		R.rowwise().any()         // any(R, 2)

		// Dot products, norms, etc.
		// Eigen                  // Matlab
		x.norm()                  // norm(x).    Note that norm(R) doesn't work in Eigen.
		x.squaredNorm()           // dot(x, x)   Note the equivalence is not true for complex
		x.dot(y)                  // dot(x, y)
		x.cross(y)                // cross(x, y) Requires #include <Eigen/Geometry>

		// Eigen                           // Matlab
		A.cast<double>();                  // double(A)
	A.cast<float>();                   // single(A)
	A.cast<int>();                     // int32(A)
	A.real();                          // real(A)
	A.imag();                          // imag(A)
	// if the original type equals destination type, no work is done

	// Note that for most operations Eigen requires all operands to have the same type:
	MatrixXf F = MatrixXf::Zero(3, 3);
	A += F;                // illegal in Eigen. In Matlab A = A+F is allowed
	A += F.cast<double>(); // F converted to double and then added (generally, conversion happens on-the-fly)

	// Eigen can map existing memory into Eigen matrices.
	float array[3];
	Vector3f::Map(array).fill(10);            // create a temporary Map over array and sets entries to 10
	int data[4] = { 1, 2, 3, 4 };
	Matrix2i mat2x2(data);                    // copies data into mat2x2
	Matrix2i::Map(data) = 2 * mat2x2;           // overwrite elements of data with 2*mat2x2
	MatrixXi::Map(data, 2, 2) += mat2x2;      // adds mat2x2 to elements of data (alternative syntax if size is not know at compile time)

	// Solve Ax = b. Result stored in x. Matlab: x = A \ b.
	x = A.ldlt().solve(b));  // A sym. p.s.d.    #include <Eigen/Cholesky>
	x = A.llt().solve(b));  // A sym. p.d.      #include <Eigen/Cholesky>
	x = A.lu().solve(b));  // Stable and fast. #include <Eigen/LU>
	x = A.qr().solve(b));  // No pivoting.     #include <Eigen/QR>
	x = A.svd().solve(b));  // Stable, slowest. #include <Eigen/SVD>
	// .ldlt() -> .matrixL() and .matrixD()
	// .llt()  -> .matrixL()
	// .lu()   -> .matrixL() and .matrixU()
	// .qr()   -> .matrixQ() and .matrixR()
	// .svd()  -> .matrixU(), .singularValues(), and .matrixV()

	// Eigenvalue problems
	// Eigen                          // Matlab
	A.eigenvalues();                  // eig(A);
	EigenSolver<Matrix3d> eig(A);     // [vec val] = eig(A)
	eig.eigenvalues();                // diag(val)
	eig.eigenvectors();               // vec
	// For self-adjoint matrices use SelfAdjointEigenSolver<>
}

2.4

三、new的用法

参考文章 c++中new的作用、C++如何让函数返回数组

 //可以在new后面直接赋值
    int* p = new int(3);
    //也可以单独赋值
    //*p = 3;

    //如果不想使用指针,可以定义一个变量,在new之前用“*”表示new出来的内容
    int q = *new int;
    q = 1;
    cout << q << endl;

3.1 内存的四种分区

栈区(stack): 编译器自动分配和释放的,主要存储的是函数的参数值,局部变量等值。发生函数调用时就为函数运行时用到的数据分配内存,函数调用结束后就将之前分配的内存全部销毁。所以局部变量、参数只在当前函数中有效,不能传递到函数外部。栈内存的大小和编译器有关,编译器会为栈内存指定一个最大值,在 VC/VS 下,默认是 1M。

堆区(heap): 动态分配。一般由程序员分配和释放(动态内存申请malloc与释放free),需要手动free。否则会一直存在,若程序员不释放,程序结束时可能由操作系统回收。

全局区(静态区)(static): 静态分配。全局变量和静态变量的存储是放在一块的,该区域在程序结束后由操作系统释放。

代码区:: 通常用来存放程序执行代码(包含类成员函数和全局函数及其他函数代码),这部分区域的大小在程序运行前就已经确定,也有可能包含一些只读的常数变量,例如字符串变量。

3.2 new的作用

在这里插入图片描述

用法示例:

int *a = new int[5];
class A {...}   //声明一个类 A
A *obj = new A();  //使用 new 创建对象
delete []a;
delete obj;

3.3

3.4

四、

4.1

4.2

4.3

4.4

总结

二维数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/345437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十六、基于FPGA的CRC校验设计实现

1&#xff0c;CRC校验循环冗余校验&#xff08;Cyclic Redundancy Check&#xff0c; CRC&#xff09;是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术&#xff0c;主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的…

【情人节用Compose给女神写个爱心动画APP】

情人节用Compose给女神写个爱心动画APP前言涉及知识点实现思路实现过程绘制爱心创建动画效果Preview预览效果完整源码彩蛋前言 前一阵子看电视里的学霸用代码写了个炫酷的爱心&#xff0c;网上有很多js和python的源码&#xff0c;复制粘贴就能拥有&#xff0c;但是Android的好…

重写-linux内存管理-伙伴分配器(一)

文章目录一、伙伴系统的结构二、初始化三、分配内存3.1 prepare_alloc_pages3.2 get_page_from_freelist3.2.1 zone_watermark_fast3.2.2 zone_watermark_ok3.2.3 rmqueue3.2.3.1 rmqueue_pcplist3.2.3.2 __rmqueue3.2.3.2.1 __rmqueue_smallest3.2.3.2.2 __rmqueue_fallback3.…

怎么代理微信小程序创业?

随着微信的兴起&#xff0c;小程序已经成为了人们生活中不可或缺的一部分。如果你想要创业的话&#xff0c;那么代理微信小程序是一个不错的选择。本文将为大家介绍怎么代理微信小程序创业。 一、什么是微信小程序 微信小程序是一款专为移动设备使用者而设计的应用。它通过扫…

javaEE 初阶 — 滑动窗口

文章目录滑动窗口1 滑动窗口下如何处理丢包TCP 工作机制&#xff1a;确认应答机制 超时重传机制 连接管理机制 滑动窗口 确认应答机制、超时重传机制、连接管理机制 都是给 TCP 的可靠性提供支持的。 虽然事变的比较可靠了&#xff0c;但是是有牺牲的&#xff0c;那就是传输…

黑马SpringCloud知识点和面试题

目录 一、微服务 1.1、微服务技术栈 1.2、微服务的介绍&#xff1a; 1.3、微服务技术对比 1.4、认识微服务-springcloud 1.4.1、springcloud和springboot的兼容性&#xff08;左边springcloud右边springboot版本&#xff09; 1.5、服务拆分&#xff0c;服务远程调用&…

数学建模美赛【LaTeX】公式、表格、图片

数学建模美赛【LaTeX】公式、表格、图片 1 宏包 \package{ } 就是在调用宏包&#xff0c;对计算机实在外行的同学姑且可以理解为工具箱。 每一个宏包里都定义了一些专门的命令&#xff0c;通过这些命令可以实现对于一类对象&#xff08;如数学公式等&#xff09;的统一排版&a…

opencv的TrackBar控件

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

HTML预格式化文本pre标签

文章目录参考white-spaceword-breakfont-family参考 https://blog.csdn.net/weixin_44368963/article/details/120054949 https://www.zhangxinxu.com/wordpress/2017/03/css-font-family-chinese-english/ pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留…

UG二次开发装配篇 添加/拖动/删除组件方法的实现

我们在UG装配的过程中&#xff0c;经常会遇到需要调整组件目录位置&#xff0c;在软件设计过程中可以通过在目录树里面拖动组件来完成。 那么&#xff0c;如果要用程序实现组件的移动/拖动&#xff0c;我们要怎么做呢&#xff1f; 本节就完成了添加/拖动/删除组件方法的实现&…

ZooKeeper集群搭建步骤

一、准备虚拟机准备三台虚拟机&#xff0c;对应ip地址和主机名如下&#xff1a;ip地址Hostname192.168.153.150ant163192.168.153.151ant164192.168.153.152ant165修改hostname&#xff0c;并使之生效[rootlocalhost /]# hostnamectl set-hostname zookeeper1 //修改hostname …

分享好玩的h5小游戏制作步骤_怎么做h5微信小游戏

近年来&#xff0c;市面上一直流行各种h5游戏&#xff0c;例如投票、答题、刮刮乐、大转盘等等等等&#xff0c;而且我在各种营销场景下经常看到它们的身影&#xff0c;是做促销&#xff0c;引流和宣传的神器之一&#xff01;那么&#xff0c;怎么做好玩的h5游戏&#xff1f;还…

网络安全-Nmap

网络安全-Nmap Nmap-号称诸神之眼 这个呢就是用来扫描网络端口的 Namp的工作原理很像一个雷达 做任何攻击之前&#xff0c;得先知道怎么去找破绽&#xff0c;而不是钢铁洪流&#xff0c;那个是不叫渗透了&#xff0c;叫硬钢。 咋用呢&#xff1f; 很简单 直接 nmap 后面跟网址…

Linux内核转储---kdump原理梳理

文章目录Kexec和Kdump设计的区别kexeckdumpKdump的执行流程kexec的实现用户空间kexec内核空间vmcoreKdump的实现可以分为两部分&#xff1a;内核和用户工具。内核提供机制&#xff0c;用户工具在这些机制上实现各种转储策略&#xff0c;内核机制对用户工具的接口是一个系统调用…

华为HCIE学习之Openstack Nova组件

文章目录一、openstack组成形式二、Nova的模块1、Nova-api功能2、Nova-scheduler功能3、Nova-conductor功能4、Nova-novncproxy5、Nova-compute三、nova中的一些概念 一、openstack组成形式 openstack由一个个组件组成&#xff0c;每个组件由一个个模块组成。 二、Nova的模块…

mac上安装redis的两种方法

mac上安装redis的两种方法1. 安装方式1->使用homebrew安装redis1.1 安装redis1.1.1 安装homebrew1.1.2 查看redis安装目录1.2 安装等简单命令1.3 启动等相关命令1.3.1 使用brew命令启动1.3.2 redis-cli连接redis服务1.3.3 使用配置文件启动1.42. 安装方式2->官网下载安装…

Spring Cloud之Zuul

目录 简介 Zuul中的过滤器 过滤器的执行流程 使用过滤器 route过滤器的默认三种配置 路由到服务 路由到url地址 转发给自己 自定义过滤器 简介 Zuul是Netflix开源的微服务网关&#xff0c;主要功能是路由转发和过滤器&#xff0c;其原理也是一系列filters&#xff0…

图文解说S参数(进阶篇)

S参数是RF工程师/SI工程师必须掌握的内容&#xff0c;业界已有多位大师写过关于S参数的文章&#xff0c;即便如此&#xff0c;在相关领域打滚多年的人&#xff0c; 可能还是会被一些问题困扰着。你懂S参数吗? 图文解说S参数&#xff08;基础篇&#xff09; 请继续往下看...台湾…

数据结构(三):集合、字典、哈希表

数据结构&#xff08;三&#xff09;一、集合&#xff08;Set&#xff09;1.封装一个集合类2.集合常见的操作&#xff08;1&#xff09;并集&#xff08;2&#xff09;交集&#xff08;3&#xff09;差集&#xff08;4&#xff09;子集二、字典&#xff08;Map&#xff09;三、…

Powershell Install SQL Server 2022

前言 SQL Server 2022 (16.x) 在早期版本的基础上构建,旨在将 SQL Server 发展成一个平台,以提供开发语言、数据类型、本地或云环境以及操作系统选项。 SQL Server Management Studio (SSMS) 是一种集成环境,用于管理从 SQL Server 到 Azure SQL 数据库的任何 SQL 基础结构…