小编The*_*Man的帖子

具有不同参数的派生类中的C++方法

这是一个关于如何实现我最近遇到的一些需求的问题.我相信这有一个模式或共同的解决方案,即使我已经有一个,我渴望了解更多.

假设我正在一个游戏中工作,其中与游戏本身相关的所有实体都来自一个类"演员"(比如"障碍物","移动障碍物","射弹"和"大炮").在游戏中,所有这些实体都存储在std::vector<Actor *>向量中,以便可以遍历它们.

现在,让我们假设每个"演员"可以在每个回合"做"某事,让我们给他们一个方法"行动".Obstacle :: act会做的很少,Moving_obstacle :: act和Projectile :: act会移动它们,而"Cannon :: act"会创造一个新的射弹.有一个纯粹的虚函数Actor :: act是有意义的,所以我可以反过来做类似的事情:

std::vector<Actor *>::iterator b=myvectorofactors.begin(), e=myvectorofactors.end();
while(b < e)
{
    *b->act();
     b++;
}
Run Code Online (Sandbox Code Playgroud)

让他们都"行动".好吧,到目前为止一切都那么好......事实是,Cannon :: act可能有不同的原型或返回值(例如,存储生成的射弹和推进器将其推入矢量)并且这个"小"差异打破一切.

现在,我知道从某些角度来看,这些方法的重载都是完全不同的功能.我也知道,人们总是可以提前计划并以足够的远见来解决问题...或者可以解决问题.

在这种情况下,我只是为每个派生的Actor类使用了不同的唯一标识符,并使用它们转换为通信类并围绕它们进行工作.我相信我会再次遇到同样的问题,我很想知道一些入门级解决方案.

在此先感谢您的时间.

c++ overloading

6
推荐指数
1
解决办法
674
查看次数

MySQL插入,PHP比C++更快,这是预期的吗?

最近我的任务是做一些速度检查,所以我可以判断是否更快使用php/php-cli或c ++将一定数量的行插入数据库.

在开始之前,让我告诉你一些细节,以便一切都清楚:

  • php部分通过Apache运行,直接在浏览器中请求.
  • 正在运行的硬盘驱动器测试是SSD驱动器.我猜常规驱动器的速度会慢一些.这台机器本身并不特别,六年左右.
  • 所有插入都是通过准备好的声明完成的.我们在php和mysqlcppconn(由Oracle提供的mysql c ++连接器)上使用mysqli.
  • 所有插入都是通过输入完成的.我知道我们可以叠加它们,但我们正在这里进行测试.
  • 时间通过php中的microtime和c ++中的header显示.
  • 当然,代码本身并不等同.稍后会详细介绍.
  • 所有文本都是UTF-8.那里有俄语,中文,阿拉伯语,西班牙语,英语和各种疯狂的东西.mysql表位于utf8_4mb中.
  • c ++代码的数字是使用std :: vector和-O2级别用g ++编译的结果(向量优于map,unordered_maps和std :: arrays).

所以,这是一个过程:

  • 连接到数据库.
  • 打开N行的文本文件.
  • 读一行文件.
  • 拆分分隔符上的行.
  • 使用分割线的某些部分来获取插入值(例如,第0个,第1个和第3个索引).
  • 将这些部分发送到准备好的语句中以插入它们.
  • 重复,直到完全读取文件.

两个代码都完全按预期工作.以下是结果数字:

PHP:

  • 5000个条目:1.42 - 1.27秒.
  • 20000个参赛作品:5.53 - 6.18秒.
  • 50000个参赛作品:14.43 - 15.69秒.

C++:

  • 5000个条目:1.78 - 1.81秒.
  • 20000个参赛作品:7.19 - 7.22秒.
  • 50000个参赛作品:18.52 - 18.84秒.

php优于c ++,因为文件中的行增加...首先,我怀疑行拆分功能:php中的拆分是用"爆炸"完成的.该算法与c ++一样天真......容器通过引用传递,其内容随时更改.容器只遍历一次.我确保容器"reserve()"所有必要的空间(记住,我最终选择向量)是固定的.容器在main函数上创建,然后通过代码通过引用传递.它永远不会被清空或调整大小:只有它的内容会改变.

template<typename container> void explode(const std::string& p_string, const char p_delimiter, container& p_result)
{
    auto it=p_result.begin();
    std::string::const_iterator beg=p_string.begin(), end=p_string.end();
    std::string temp;

    while(beg < end)
    {
        if( (*beg)==p_delimiter)
        {
            *(it)=temp;
            ++it; …
Run Code Online (Sandbox Code Playgroud)

php c++ mysql performance

5
推荐指数
1
解决办法
910
查看次数

Symfony,使用数组将对象序列化为保留属性和结构的 XML

我正在使用 Symfony2 并尝试将不同的对象集合序列化为 XML。为了简洁起见,我们假设我正在尝试列出和取消列出实体,这是我想要获得的 XML 结果:

<?xml version="1.0" encoding="UTF-8"?>
<r someattribute="value">
    <data_list>
        <item id="9" type="a"><![CDATA[list data 1]></item>
        <item id="10" type="a"><![CDATA[list data 2]></item>
        <item id="11" type="b"><![CDATA[list data 3]></item>
    </data_list>
    <data_unlist>
        <uitem id="9" type="a" />
    </data_unlist>
</r>
Run Code Online (Sandbox Code Playgroud)

以下是我的类:“item”节点的 Item、“uitem”节点的 Uitem 和 Model,以包含所有这些节点:

class Item
{
    private $data=array();
    public function getData() {return $this->data;}

    public function __construct($id, $type, $value)
    {
        $this->data["@id"]=$id;
        $this->data["@type"]=$type;
        //How do I put $value as the node value????
    }
}

class UItem
{
    private $data=array();
    public function getData() {return $this->data;}

    public …
Run Code Online (Sandbox Code Playgroud)

php xml serialization symfony

1
推荐指数
1
解决办法
7699
查看次数

标签 统计

c++ ×2

php ×2

mysql ×1

overloading ×1

performance ×1

serialization ×1

symfony ×1

xml ×1