C++指针数组-初始化和访问对象
C++ array of pointers - initializing and accessing objects
指针数组出现问题。我有一个名为C的自定义类。C有一个变量双c1。我必须使用自定义编写的排序算法按c1对一个C数组进行排序。我猜,由于我必须在数组中移动对象,所以只移动指向对象的指针会更有效,因此我必须使用的不是对象数组,而是指向对象的指向数组。
我这样初始化数组:
C** someC;
someC = new C*[size];
for(int i = 0; i < size; i++) {
// a and b are of type CPoint
someC[i] = new C(a,b);
}
这部分我做得对吗?正是对C对象的调用导致了问题:
someC[i]->a.x
给我一个错误:"->a"的左边必须指向类/结构/联合/泛型类型
我是C++的新手,所以我可能遗漏了一些显而易见的东西,但我做了一些研究,没有发现任何东西。也许我不太了解指针是如何工作的。。。
更新
C类的头文件:
#pragma once
class C
{
public:
CPoint a;
CPoint b;
double c1;
C(void);
C(CPoint,CPoint);
~C(void);
};
实现:
#include "StdAfx.h"
#include "C.h"
#include <math.h>
C::C(void)
{
}
C::C(CPoint a, CPoint b)
{
this->a=a;
this->b=b;
double c1_x = a.x - b.x;
double c1_y = a.y - b.y;
c1= sqrt( (c1_x * c1_x) + (c1_y * c1_y));
}
C::~C(void)
{
}
更新
问题出在我在评论中提供的代码中,我没有注意到我以错误的方式调用数组,如下所示:
pDC->MoveTo(someC[i]->a.x, someC->a.y)
所以第二次呼叫是错误的。感谢大家对的帮助
撇开哲学不谈,这从你的评论中很有说服力(强调):
"我实际上在OnDraw方法中调用someC,如下所示:pDC->MoveTo(someC[i]->a.x, someC->a.y);
someC在头文件中被定义为public">
具体来说,在您的参数列表中:
someC[i]->a.x, someC->a.y
这告诉我其中一个是错误的。根据你的错误判断,我还是选第一个。如果我们能看到实现OnDraw()
的对象的定义,并且正是从中获取someC
,这将巩固这一点。
- 如果
someC
是包含对象中的C*
,则第二个参数是正确的,第一个参数是错误的 - 如果
someC
是包含对象中的C**,则第一个参数是正确的,第二个参数是错误的
除非C
对象的复制构造真的很昂贵,否则不要麻烦实现自定义排序算法,而是在C
:上定义严格的总顺序
bool operator<(C const& lhs, C const& rhs) {
return lhs.c1 < rhs.c1;
}
并且在CCD_ 10上使用CCD_。如果您确实担心复制构造开销,您也可以直接使用std::set<C>
,它会自动对自己进行排序,而不需要复制构造。
编辑后:您的C
看起来相对较小且易于复制,但它处于临界状态;您最好同时给出两种方法(set
和vector
),并确定哪种方法更快。
如果您的类型只包含一个double
,我想使用指针会快得多而不是!如果对象包含std::string
或std::vector<T>
(在一段时间内为T
),则图片可能会发生变化,但与移动具有一个或两个基本对象的结构相比,访问或多或少随机分布的数据的成本相当高。当然,为了确定具体情况,您需要对这两种方法进行简介。
- 使用迭代器时如何访问对象在向量中的位置?
- 无法通过指针访问对象的成员
- 如何从传递到对象的对象内部访问对象的类属性?
- 有没有办法在C++中循环访问对象的不同数据成员
- 如何访问对象动态数组中的私有成员变量?
- c++ 循环访问对象列表并删除对象
- 循环访问对象列表 c++
- 访问对象的取消引用值的语法
- 如何访问对象的成员变量的取消引用值
- C++:访问对象内部子对象的方法
- 如果访问对象,则指向的对象内部的指针会更改内存位置
- 是否可以从 C++ 中的构造函数访问对象名称?
- 仅允许访问对象的成员,而不允许访问对象本身
- 从地图访问对象会导致新对象C 的实例化
- 如何在数组中访问对象内的字符串
- 在C 中运行时从指针访问对象实例
- 有关使用矢量迭代器访问对象方法的问题
- 当对象的指针存储在矢量中时,如何访问对象中的方法?
- 显式调用"运算符 new"后无法访问对象的函数
- 尝试访问对象数组中的对象,但只保存了一个对象