本文整理汇总了C++中ListNode::getObject方法的典型用法代码示例。如果您正苦于以下问题:C++ ListNode::getObject方法的具体用法?C++ ListNode::getObject怎么用?C++ ListNode::getObject使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ListNode
的用法示例。
在下文中一共展示了ListNode::getObject方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: remove
bool List::remove(Object* const object)
{
bool objectFound = false;
ListNode* temp = this->first;
ListNode* prev = NULL;
ListNode* next = NULL;
while( temp != NULL ) {
if (object == temp->getObject()) {
next = temp->getNext();
delete temp;
if(next == NULL)
last = NULL;
if(prev == NULL)
first = next;
else
prev->setNext(next);
objectFound = true;
break;
}
prev = temp;
temp = temp->getNext();
}
return objectFound;
}
示例2: getNext
Object* List::getNext()
{
if(actual != NULL ) {
ListNode* temp = actual;
actual = actual->getNext();
return temp->getObject();
}
else
return NULL;
}
示例3: KeyValue
/*---------------------------------------------------------------------*//**
コピー
**//*---------------------------------------------------------------------*/
void ProgMatter::Setting::copy(const Setting* s)
{
// _listParams のコピー
{
_listParams->removeAll();
ListNode<KeyValue*>* lnode = s->_listParams->getHeadNode();
while(lnode != 0L)
{
_listParams->addTail(new KeyValue(*lnode->getObject()));
lnode = lnode->getNext();
}
}
}
示例4: subdivide
void KdTree::subdivide( KdTreeNode* a_Node, Box& a_Box, int depth, int obs )
{
//将宽度最大的轴向作为切割轴向
Vec3 s = a_Box.getSize();
if ((s.x >= s.y) && (s.x >= s.z))
a_Node->setAxis( 0 );
else if ((s.y >= s.x) && (s.y >= s.z))
a_Node->setAxis( 1 );
else
a_Node->setAxis( 2 );
int axis = a_Node->getAxis();
double* splitPos_ = new double[obs*3+100];
double* splitPos = new double[obs*3+100];
int split = 0;
int split_ = 0;
double* llist = new double[obs];
double* rlist = new double[obs];
ListNode* list = a_Node->getList();
for( int i = 0; i < obs; i++)
{
llist[i] = list->getObject()->getMin(axis);
rlist[i] = list->getObject()->getMax(axis);
Object* ob = list->getObject();
if( ob->getType() == Object::TRIANGLE)
{
for(int j = 0;j < 3;j++)
splitPos_[split_++] = ( (Triangle*)ob )->getVertex(j)->getPos().cell[axis];// 分割线可能超过外盒
}
else
{
splitPos_[split_++] = ob->getMin(axis);
splitPos_[split_++] = ob->getMax(axis);
}
list = list->getNext();
}
std::sort(llist, llist+obs);
std::sort(rlist, rlist+obs);
std::sort(splitPos_, splitPos_ + split_);
double lastsplit = -10000;
for(int i = 0; i < split_; i++)
{
if(lastsplit != splitPos_[i])
{
splitPos[split++] = splitPos_[i];
lastsplit = splitPos_[i];
}
}
// 当前节点盒子总面积的倒数
double SAV = 0.5 / (a_Box.w() * a_Box.d() + a_Box.w() * a_Box.h() + a_Box.d() * a_Box.h());
// 当前节点的cost
double Cleaf = obs * 1.0;
double lowcost = 10000000;
double bestpos = 0;
int n1, n2;
int L = 0, R = 0;
double pos1 = a_Box.getPos().cell[axis];
double pos2 = a_Box.getSize().cell[axis] + a_Box.getPos().cell[axis];
Box b1, b2, b3 = a_Box, b4 = a_Box;
for( int i = 0; i < split; i++)
{
n1 = 0;
n2 = 0;
while(llist[L] <= splitPos[i] && L < obs) L++;
while(rlist[R] < splitPos[i] && R < obs) R++;
if( L ==0 )
continue;
else
n1 = L;
if( R > obs)
continue;
else
n2 = obs - R;
// b3为左盒,b4为右盒
b4.getPos().cell[axis] = splitPos[i];
b4.getSize().cell[axis] = pos2 - splitPos[i];
b3.getSize().cell[axis] = splitPos[i] - pos1;
// 计算分割后的cost
double SA1 = 2 * (b3.w() * b3.d() + b3.w() * b3.h() + b3.d() * b3.h()); //左盒子表面积
double SA2 = 2 * (b4.w() * b4.d() + b4.w() * b4.h() + b4.d() * b4.h()); //右盒子表面积
double splitcost = 0.3 + 1.0 * (SA1 * SAV * n1 + SA2 * SAV * n2 );
// 更新最佳cost
if (splitcost < lowcost)
{
lowcost = splitcost;
bestpos = splitPos[i];
b1 = b3, b2 = b4;
}
}
if (lowcost > Cleaf) //若分割后不如分割前的cost小,则结束分割
return;
a_Node->setSplitPos( bestpos );
// 建立左右孩子节点
//.........这里部分代码省略.........