簡體   English   中英

容器模板參數性能對比?

[英]Performance comparison about template parameters of container?

我正在開發一個包含不同類型向量的應用程序,如下所示

#include <vector>
#include <variant>
#include <any>

class Symbol{};
class Terminal : public Symbol{
    Token token;
};
class NonTerminal : public Symbol{};

Terminal main(){
    std::vector< std::any > vec1 = {Terminal(), NonTerminal()};                           // 1
    std::vector< std::variant<Terminal,NonTerminal> > vec2 = {Terminal(), NonTerminal()}; // 2
    std::vector<Symbol> vec3 = {Terminal(), NonTerminal()};                               // 3
}

其中, TerminalNonTerminalSymbol派生類,來自上下文無關語言的基本理論。 在三個向量中,哪個最快,考慮迭代元素?

一個關鍵問題是派生類Terminal持有一個額外的成員變量token 另一種實現(我同事的想法)如下所示,

#include <vector>

class Symbol{
    bool isTerminal; // to differentiate Terminal and NonTerminal
    Token token;
};

Terminal main(){
    std::vector<Symbol> vec;
}

這個怎么樣?

他們做不同的事情,所以說哪個更快是沒有意義的。

vec1丟棄類型信息,所以你必須記住你在其他地方放入Terminal然后NonTerminal Terminal

vec2保留所有信息,因此您可以std::visit每個元素。

vec3不包含任何Terminal或非NonTerminal對象,它從初始值設定項中的值中復制Symbol基礎子對象。 值得注意的是, Terminaltoken成員沒有被復制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM