我正在将一些代码移植到另一个结构:
class EnvironObject
{
protected:
vector<float> mX, mY, mXSpeed, mYSpeed;
int mMaxObjects;
public:
virtual void init(int maxObjects);
virtual void setLimit(int limit);
virtual int getLimit();
virtual void update(float arg) = 0;
};
void EnvironObject::setLimit(int limit)
{
mMaxObjects = limit;
mX.resize(limit, 0); mY.resize(limit, 0);
mXSpeed.resize(limit, 0); mY.resize(limit, 0);
}
int EnvironObject::getLimit()
{
return mMaxObjects;
}
void EnvironObject::init(int maxObjects)
{
mX = mY = mXSpeed = mYSpeed = std::vector<float>(mMaxObjects);
fill(mX.begin(), mX.end(), 0);
fill(mY.begin(), mY.end(), 0);
fill(mXSpeed.begin(), mXSpeed.end(), 0);
fill(mYSpeed.begin(), mYSpeed.end(), 0);
/*mX.reserve(mMaxObjects * …Run Code Online (Sandbox Code Playgroud) 我正在尝试将工作的iPhone代码移植到Mac(iOS到OSX - 我相信?)
工作的iPhone版本是
...
return [[UIColor alloc] initWithRed:r green:g blue:b alpha:1.0f];
}
Run Code Online (Sandbox Code Playgroud)
不工作的Mac尝试是
...
return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
}
Run Code Online (Sandbox Code Playgroud)
但是当我后来访问容器时,NSColor就不存在了.但是当我尝试各种版本的[NSColor alloc]时,它们都没有"工作".
我的问题是,我如何创建一个持久的NSColor(以后,我必须取消分配)?
创建对象的以下两种方法有什么区别?
Test* t = new Test();
Run Code Online (Sandbox Code Playgroud)
和
Test* t;
Run Code Online (Sandbox Code Playgroud)
你对第二个样本的答案与我认为它会做的事情相匹配(没有创建对象)但是
class Test {
public:
void bla(void) {
std::cout << "test" << std::endl;
};
};
int main(void) {
Test* test;
test->bla();
}
Run Code Online (Sandbox Code Playgroud)
给我输出"测试"......所以实际上有一个对象
我想计算一个char指针占用内存的字节数.指针指向一个包含100个字符的字符串.
根据以下程序,char需要4个字节
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char b;
b = 'b';
printf("%p\n",&b);
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
指针是否相同?因此,对于100个字符串,它在内存中保存了400个字节?
我有一个正常工作的for循环.我添加了一个新的UIVIew子类分配,在每个循环迭代中完成:
for (n=something; n>0; n--)
{
//(...)
MyView* theview=[[myView alloc]initWithFrame:self.frame];
float y=sin(DEGREES_TO_RADIANS(currentAngle));
float x=cos(DEGREES_TO_RADIANS(currentAngle));
theview.point1=CGPointMake(x, y);
// printf x & y here
[self addSubview:theview];
}
Run Code Online (Sandbox Code Playgroud)
事实上,视图是分配的,但是当我查看视图时,循环内定义的点与point1不同.
实际上,视图的所有迭代似乎都是在循环结束之后分配的,正如在视图的drawrect方法中的printf所述,在调用循环的所有迭代中的所有printf之后调用该方法.如果不清楚,我会看到类似的东西:
x = 1 Y = 1 x = 2 y = 2 x = 3 y = 3 printf来自视图printf来自视图printf的视图
.为什么?提前致谢!
我目前正在创建一个我正在创建的程序的问题.我已经找到了答案,但它与我想要发生的事情有所不同,因为这里给出的是字符串.
我们被要求创建一个FIFO分配,这是程序作为控制台应用程序的预期流程:
输入号码.页面框架:2
输入号码.要插入的页面数:4
要插入的页面:A
插入帧1.中断生成.
要插入的页面:B
插入帧2.中断生成.
要插入的页面:A
插入失败.A是常驻页面.
要插入的页面:C
插入帧1.中断生成.
根据FIFO分配算法,如果插入新的不同页面,它将删除插入帧中的最早页面.如果页面已经在框架中,则页面插入将被拒绝.
我已经做了一个,虽然我目前陷入困境,试图弄清楚如何在数组中找到最早插入的元素.
我希望你能帮助我.我已经花了很多时间,但我只是不知道该怎么做.这是我的代码:
class Program
{
static void Main(string[] args)
{
int f, p, interrupt;
Console.WriteLine("Enter the number of frames: ");
f = Int32.Parse(Console.ReadLine());
string[] frame = new string[f];
Console.WriteLine("Enter the number of pages: ");
p = Int32.Parse(Console.ReadLine());
for (int i = 0; i < p; i++) {
Console.WriteLine("Page to be inserted: ");
string x = Console.ReadLine();
if (frame.Contains(x))
{
Console.WriteLine(x + " is a resident page.");
} …Run Code Online (Sandbox Code Playgroud) 我不确定如何初始化Objective-C类中的各种属性.请假设我在你的答案中是Objective-C的新用户......
我有以下课程:
考试班
@interface Test : NSObject
@property (nonatomic, strong) NSString *name;
@end
Run Code Online (Sandbox Code Playgroud)
TestManager类
@interface TestManager : NSObject
@property (nonatomic, strong) NSMutableArray *tests; // array of Test objects (array size unknown until runtime)
@end
Run Code Online (Sandbox Code Playgroud)
控制器类
@interface TestController : NSObject
@property (nonatomic, strong) TestManager *aManager;
-(void)initManager;
-(void)doSomething;
@end
Run Code Online (Sandbox Code Playgroud)
我想要一个像initManager被调用的方法:
-(void)initManager
{
// how can I init the aManager which will have an array of Test objects
}
Run Code Online (Sandbox Code Playgroud)
它将自动分配一个对象数组,以存储在manager类中,这样我就可以执行以下操作:
-(void)doSomething
{
NSString *name = ((Test *)[self.aManager.tests objectAtIndex:0]).name;
}
Run Code Online (Sandbox Code Playgroud)
我甚至不确定initManager是否是正确的使用方法 - …
我知道这个问题标题看起来很可怕,但事实并非如此.抱歉!
那么,创建一次性/不可更改的"变量"有什么意义呢?
假设我在Person对象中有一个名为"name"的属性.
const Person = {
name: 'Luis Felipe Zaguini'
};
Run Code Online (Sandbox Code Playgroud)
好的.所以,看到人们这样做是非常普遍的:
let personName = Person.name;
console.log(`I've written my name, and it is ${personName}.`);
Run Code Online (Sandbox Code Playgroud)
就是这样.在大多数情况下,变量只使用一次.或者,有时,它在其他语句中被引用,但是你知道,它是无用的,因为有一种方法可以在不设置新变量的情况下引用它.
从技术上讲,你浪费CPU内存,为无用的东西分配内存,因为事实上,你可以Person.name多次输入,并执行以下操作:
console.log(`I've written my name, and it is ${Person.name}.`);
Run Code Online (Sandbox Code Playgroud)
此外,您正在浪费时间并在代码中添加更多行.我是否过度了?很多程序员都会做这种事情,但就个人而言,它似乎并不适合我.
我有一个生成随机的函数,int64并返回interface{}如下:
func Val1(rnd rand.Source) interface{} {
return rnd.Int63()
}
Run Code Online (Sandbox Code Playgroud)
现在考虑这个函数,它做同样的事情,但返回一个 int64
func Val2(rnd rand.Source) int64 {
return rnd.Int63()
}
Run Code Online (Sandbox Code Playgroud)
我使用this(go test -bench=. -benchmem)对这两个函数进行了基准测试:
func BenchmarkVal1(b *testing.B) {
var rnd = rand.NewSource(time.Now().UnixNano())
for n := 0; n < b.N; n++ {
Val1(rnd)
}
}
func BenchmarkVal2(b *testing.B) {
var rnd = rand.NewSource(time.Now().UnixNano())
for n := 0; n < b.N; n++ {
Val2(rnd)
}
}
Run Code Online (Sandbox Code Playgroud)
得到了以下结果:
BenchmarkVal1-4 50000000 32.4 ns/op 8 B/op 1 allocs/op
BenchmarkVal2-4 200000000 …Run Code Online (Sandbox Code Playgroud) 在Delphi中,我看到了几个可以用来分配内存的类似函数,例如GetMem和AllocMem。它们之间有什么区别?
我阅读了文档,发现分配后GetMem不会初始化内存,而AllocMem会初始化。
那我在调用GetMem之后是否需要初始化内存?医生说是。但是我在某些Delphi源代码中看到它们不调用Initialize。
以及在使用完内存后是否需要最后确定内存?我在一些Delphi源代码中看到了,但是确实没有。
谢谢