「Qtの基礎 - コンテナクラス」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <br><br> == QVector == ==== CMake / QMake ==== QVectorクラスを使用する場合は、QVectorをインクルードする必要がある。<br> <syntaxhighlight lang="c++"> #include <QVector> </syntaxhighlight> <br> * CMakeを使用する場合 <syntaxhighlight lang="cmake"> # Qt 5の場合 find_package(Qt5 REQUIRED COMPONENTS Core) target_link_libraries(<ターゲット名> PRIVATE Qt5::Core) # Qt 6の場合 find_package(Qt6 REQUIRED COM…」)
 
(文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…)
 
(同じ利用者による、間の1版が非表示)
31行目: 31行目:
** std::vectorクラス
** std::vectorクラス
**: C++標準ライブラリの一部であり、どのC++環境でも利用可能である。
**: C++標準ライブラリの一部であり、どのC++環境でも利用可能である。
** QVector
** QVectorクラス
**: Qtフレームワークの一部であり、Qtを使用するプロジェクトでのみ利用可能である。
**: Qtフレームワークの一部であり、Qtを使用するプロジェクトでのみ利用可能である。
*: <br>
*: <br>
64行目: 64行目:
一方、より汎用的なC++コードを記述する場合や、将来的な移植性を考慮する場合は、<code>std::vector</code>クラスを選択するほうがよい。<br>
一方、より汎用的なC++コードを記述する場合や、将来的な移植性を考慮する場合は、<code>std::vector</code>クラスを選択するほうがよい。<br>
<br>
<br>
例えば、ユーザグループを取得するロジックの場合、処理の大部分がC系の関数に依存しているため、<code>std::vector</code>を使用しても問題ない。<br>
例えば、ユーザグループを取得するロジックの場合、処理の大部分がC系の関数に依存しているため、<code>std::vector</code>クラスを使用しても問題ない。<br>
ただし、Qtを広範囲に使用するプロジェクトであれば、一貫性を保つために<code>QVector</code>クラスを選択することも合理的である。<br>
ただし、Qtを広範囲に使用するプロジェクトであれば、一貫性を保つために<code>QVector</code>クラスを選択することも合理的である。<br>
<br><br>
<br><br>


{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]

2024年10月14日 (月) 10:58時点における最新版

概要



QVector

CMake / QMake

QVectorクラスを使用する場合は、QVectorをインクルードする必要がある。

 #include <QVector>


  • CMakeを使用する場合
 # Qt 5の場合
 find_package(Qt5 REQUIRED COMPONENTS Core)
 target_link_libraries(<ターゲット名> PRIVATE Qt5::Core)
 
 # Qt 6の場合
 find_package(Qt6 REQUIRED COMPONENTS Core)
 target_link_libraries(<ターゲット名> PRIVATE Qt6::Core)


  • QMakeを使用する場合
 QT += core


QVectorクラスとは

QVectorクラスはstd::vectorクラスと似ているが、いくつかの違いがある。

  • 互換性
    • std::vectorクラス
      C++標準ライブラリの一部であり、どのC++環境でも利用可能である。
    • QVectorクラス
      Qtフレームワークの一部であり、Qtを使用するプロジェクトでのみ利用可能である。

  • パフォーマンス
    一般的に、両者のパフォーマンスは非常に近い。
    QVectorクラスは特定のケースでQtのその他の機能とより効率的に連携する可能性がある。

  • 機能
    基本的な機能は両者でほぼ同じである。
    QVectorクラスは、Qtの他のコンテナやアルゴリズムとシームレスに動作する。
    std::vectorクラスは、C++標準ライブラリのアルゴリズムと完全に互換性がある。

  • シリアライゼーション
    QVectorクラスは、Qtのシリアライゼーション機能と直接連携できる。
    std::vectorクラスの場合、カスタムシリアライゼーションが必要になる場合がある。

  • イテレータの無効化
    QVectorクラスは、要素の追加や削除時にイテレータを無効化しない設計になっている (特定の条件下)
    std::vectorクラスは、要素の追加や削除でイテレータが無効化される可能性がある。

  • メモリ管理
    QVectorクラスは、暗黙的な共有 (implicit sharing) を使用しており、コピーオンライト (copy-on-write) の最適化が行われる。
    std::vectorクラスは、一般的に、明示的なメモリ管理を行う。


選択の指針を以下に示す。

  • Qtを広範囲に使用するプロジェクトでは、QVectorクラスを選択すると他のQt機能との連携がスムーズになる。
  • クロスプラットフォームの可搬性やC++標準との互換性を重視する場合は、std::vectorクラスが適している。
  • 特にQtに依存しない部分のコードでは、std::vectorクラスを使用することにより、将来的にQtから他のフレームワークに移行する際の労力を減らせる可能性がある。
  • パフォーマンスの観点からは、どちらも十分に最適化されているため、大きな違いはない。


結論として、Qtを主要なフレームワークとして使用しているプロジェクトでは、QVectorクラスを使用することにより、Qtの他の機能との統合が容易になる。
一方、より汎用的なC++コードを記述する場合や、将来的な移植性を考慮する場合は、std::vectorクラスを選択するほうがよい。

例えば、ユーザグループを取得するロジックの場合、処理の大部分がC系の関数に依存しているため、std::vectorクラスを使用しても問題ない。
ただし、Qtを広範囲に使用するプロジェクトであれば、一貫性を保つためにQVectorクラスを選択することも合理的である。