我需要动态分配其大小在运行时给出的1-D和2-D数组.
我设法"发现" std::vector,我认为这符合我的目的,但我想问一下我写的是否正确和/或可以改进.
这就是我正在做的事情:
#include <vector>
typedef std::vector< std::vector<double> > matrix;
//... various code and other stuff
std::vector<double> *name = new std::vector<double> (size);
matrix *name2 = new matrix(sizeX, std::vector<double>(sizeY));
Run Code Online (Sandbox Code Playgroud) 我最近实现了一个CORDIC函数库来减少所需的计算能力(我的项目基于PowerPC,并且其执行时间规范非常严格).语言是ANSI-C.
其他函数(sin/cos/atan)在32位和64位实现中的精度限制内工作.
不幸的是,asin()函数系统地失败了某些输入.
出于测试目的,我已经实现了一个.h用于simulink S-Function的文件.(这只是为了方便起见,您可以将以下内容编译为独立版.exe,只需进行少量更改)
注意:我强制进行32次迭代,因为我工作在32位精度,并且需要最大可能的精度.
Cordic.h:
#include <stdio.h>
#include <stdlib.h>
#define FLOAT32 float
#define INT32 signed long int
#define BIT_XOR ^
#define CORDIC_1K_32 0x26DD3B6A
#define MUL_32 1073741824.0F /*needed to scale float -> int*/
#define INV_MUL_32 9.313225746E-10F /*needed to scale int -> float*/
INT32 CORDIC_CTAB_32 [] = {0x3243f6a8, 0x1dac6705, 0x0fadbafc, 0x07f56ea6, 0x03feab76, 0x01ffd55b, 0x00fffaaa, 0x007fff55,
0x003fffea, 0x001ffffd, 0x000fffff, 0x0007ffff, 0x0003ffff, 0x0001ffff, 0x0000ffff, 0x00007fff,
0x00003fff, 0x00001fff, 0x00000fff, 0x000007ff, 0x000003ff, 0x000001ff, 0x000000ff, 0x0000007f,
0x0000003f, 0x0000001f, 0x0000000f, 0x00000008, 0x00000004, …Run Code Online (Sandbox Code Playgroud) 我对C++(以及一般的编程)比较陌生,所以如果问题不是很清楚,请原谅我.
我所拥有的是一个程序,其中创建了一个内部定义的类[我们称之为"class1"]的一定数量的对象.该程序工作得非常好,对象可以做到他们应该做的事情.
我目前要解决的问题如下:在程序退出之前,这些对象不会被销毁(因此内存不会被解除分配),但我需要更早的内存.
在该类的其他成员中,存在其他内部定义的类的对象(其还具有作为第三类的对象的成员).
我的问题如下:如何正确定义"class1"对象的析构函数,以便取消所有数据并释放内存?
我发现了(可能这对你来说很明显)一个析构函数就像
class1::~class1(void) {
}
Run Code Online (Sandbox Code Playgroud)
将无法工作(我为所有内部定义的类定义了类似的析构函数).
阅读我明白我的错误可能是那个什么都不做的析构函数.我该如何解决这个问题?
感谢任何回答/帮助/评论的人.
费德里科
我当前的代码使用一些#defines将所有常量都放在一个.h文件中.
程序规范的一个新修改就是这样,这将需要一些常量依赖于大小写,即变量将设置大小写(可能是3个),并且根据它,必须使用适当的值.这些常数,例如:
#define CONSTANT1 1.0F
#define CONSTANT2 2.0F
float foo(float var)
{
return (CONSTANT1 + CONSTANT2*var);
}
Run Code Online (Sandbox Code Playgroud)
我现在可以想到以两种方式解决这个问题:
Way1- #define对每个可能的值都有一个,实现一个switch-case带有3个代码的代码,并在每个代码中使用相应的常量
#define CONSTANT1_a 1.0F
#define CONSTANT2_a 2.0F
#define CONSTANT1_b 2.0F
#define CONSTANT2_b 3.0F
#define CONSTANT1_c 3.0F
#define CONSTANT2_c 4.0F
switch(var_case)
{
case 0:
float foo(float var)
{
return (CONSTANT1_a + CONSTANT2_a*var);
}
case 1:
float foo(float var)
{
return (CONSTANT1_b + CONSTANT2_b*var);
}
case 2:
float foo(float var)
{
return (CONSTANT1_c + CONSTANT2_c*var);
} …Run Code Online (Sandbox Code Playgroud)