From 8dcaea93897720c5ddd9d29a5e39bea39f3320c4 Mon Sep 17 00:00:00 2001 From: HeZongLun <13425468+hezonglun@user.noreply.gitee.com> Date: Sat, 11 Oct 2025 21:18:05 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=87=86=E5=A4=87=E5=A5=BD=E5=AF=B9=20Pyth?= =?UTF-8?q?on=20=E6=9A=B4=E9=9C=B2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 12 +++-------- CMakeModules/ProjectInstall.cmake | 3 +++ CMakeModules/RegisterSubproject.cmake | 20 +++++++++++++++++-- NahidaProject.Console/CMakeLists.txt | 2 +- NahidaProject.Database/CMakeLists.txt | 2 +- NahidaProject.Generic/CMakeLists.txt | 2 +- NahidaProject.HashAlgorithm/CMakeLists.txt | 2 +- NahidaProject.Mathematics/CMakeLists.txt | 2 +- NahidaProject.Other/CMakeLists.txt | 3 ++- .../Sources/__PythonExport.cxx | 7 +++++++ NahidaProject.Serialization/CMakeLists.txt | 2 +- NahidaProject.Thread/CMakeLists.txt | 2 +- 12 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 CMakeModules/ProjectInstall.cmake create mode 100644 NahidaProject.Other/Sources/__PythonExport.cxx diff --git a/CMakeLists.txt b/CMakeLists.txt index abe230b..aa671f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,9 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31.6 FATAL_ERROR) PROJECT("NahidaProject") +SET(CMAKE_CXX_STANDARD 20) +SET(CMAKE_CXX_STANDARD_REQUIRED ON) + OPTION(BUILD_THIRDPARTY "Specific build thrid-party module" OFF) OPTION(BUILD_CONSOLE "Specific build console module" ON) OPTION(BUILD_DATABASE "Specific build database module" ON) @@ -29,39 +32,30 @@ ENDIF() IF(FALSE) ADD_SUBDIRECTORY("NahidaProject.ThirdParty") ENDIF() - IF(${BUILD_CONSOLE}) ADD_SUBDIRECTORY("NahidaProject.Console") ENDIF() - IF(${BUILD_DATABASE}) ADD_SUBDIRECTORY("NahidaProject.Database") ENDIF() - IF(${BUILD_GENERIC}) ADD_SUBDIRECTORY("NahidaProject.Generic") ENDIF() - IF(${BUILD_HASHALGORITHM}) ADD_SUBDIRECTORY("NahidaProject.HashAlgorithm") ENDIF() - IF(${BUILD_MATHEMATICS}) ADD_SUBDIRECTORY("NahidaProject.Mathematics") ENDIF() - IF(${BUILD_OTHER}) ADD_SUBDIRECTORY("NahidaProject.Other") ENDIF() - IF(${BUILD_SERIALIZATION}) ADD_SUBDIRECTORY("NahidaProject.Serialization") ENDIF() - IF(${BUILD_THREAD}) ADD_SUBDIRECTORY("NahidaProject.Thread") ENDIF() - IF(${BUILD_UNITTEST}) ADD_SUBDIRECTORY("NahidaProject.UnitTest") ENDIF() diff --git a/CMakeModules/ProjectInstall.cmake b/CMakeModules/ProjectInstall.cmake new file mode 100644 index 0000000..445bee1 --- /dev/null +++ b/CMakeModules/ProjectInstall.cmake @@ -0,0 +1,3 @@ +FUNCTION() + +ENDFUNCTION() \ No newline at end of file diff --git a/CMakeModules/RegisterSubproject.cmake b/CMakeModules/RegisterSubproject.cmake index e8eb785..f21b79f 100644 --- a/CMakeModules/RegisterSubproject.cmake +++ b/CMakeModules/RegisterSubproject.cmake @@ -1,6 +1,6 @@ -# CMakeList.txt: NahidaProject 的 CMake 模块,在此处定义项目特定的全局逻辑。 +# RegisterSubproject.cmake: NahidaProject 的 CMake 模块,在此处定义项目特定的全局逻辑。 -FUNCTION(REGISTER_SUBPROJECT MODULEID) +FUNCTION(REGISTER_SUBPROJECT MODULEID IS_BUILDPYTHON) FILE(GLOB TESTFILE ${CMAKE_SOURCE_DIR}/NahidaProject.UnitTest/Sources/*.cpp ${CMAKE_SOURCE_DIR}/NahidaProject.UnitTest/Sources/*.h @@ -26,5 +26,21 @@ FUNCTION(REGISTER_SUBPROJECT MODULEID) SET_PROPERTY(TARGET NahidaProject.${MODULEID} PROPERTY CXX_STANDARD 20) ENDIF() + IF(${IS_BUILDPYTHON}) + SET(pybind11_DIR "E:/Python 3.14/Lib/site-packages/pybind11/share/cmake/pybind11") + + FIND_PACKAGE(Python COMPONENTS Interpreter Development REQUIRED) + FIND_PACKAGE(pybind11 REQUIRED) + + pybind11_add_module("NahidaProject_${MODULEID}" + ${ALL_SOURCECODE} + ${ALL_HEADERFILE} + ${CMAKE_SOURCE_DIR}/NahidaProject.${MODULEID}/Sources/__PythonExport.cxx + ) + + TARGET_INCLUDE_DIRECTORIES("NahidaProject_${MODULEID}" PRIVATE include) + SET_TARGET_PROPERTIES("NahidaProject_${MODULEID}" PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/PythonModule) + ENDIF() + MESSAGE("Load subproject [${MODULEID}] done.") ENDFUNCTION() \ No newline at end of file diff --git a/NahidaProject.Console/CMakeLists.txt b/NahidaProject.Console/CMakeLists.txt index fd22946..7cd15f2 100644 --- a/NahidaProject.Console/CMakeLists.txt +++ b/NahidaProject.Console/CMakeLists.txt @@ -4,4 +4,4 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31 FATAL_ERROR) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules) INCLUDE(RegisterSubproject) -REGISTER_SUBPROJECT("Console") \ No newline at end of file +REGISTER_SUBPROJECT("Console" FALSE) \ No newline at end of file diff --git a/NahidaProject.Database/CMakeLists.txt b/NahidaProject.Database/CMakeLists.txt index 0325383..ede9b8f 100644 --- a/NahidaProject.Database/CMakeLists.txt +++ b/NahidaProject.Database/CMakeLists.txt @@ -4,7 +4,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31 FATAL_ERROR) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules) INCLUDE(RegisterSubproject) -REGISTER_SUBPROJECT("Database") +REGISTER_SUBPROJECT("Database" FALSE) TARGET_LINK_LIBRARIES(NahidaProject.DatabaseTests PUBLIC odbc32) TARGET_LINK_LIBRARIES(NahidaProject.Database.IMPLEMENT PUBLIC odbc32) diff --git a/NahidaProject.Generic/CMakeLists.txt b/NahidaProject.Generic/CMakeLists.txt index c9a738b..d5ec27e 100644 --- a/NahidaProject.Generic/CMakeLists.txt +++ b/NahidaProject.Generic/CMakeLists.txt @@ -4,7 +4,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31 FATAL_ERROR) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules) INCLUDE(RegisterSubproject) -REGISTER_SUBPROJECT("Generic") +REGISTER_SUBPROJECT("Generic" FALSE) TARGET_LINK_LIBRARIES(NahidaProject.GenericTests PUBLIC ws2_32) TARGET_LINK_LIBRARIES(NahidaProject.Generic.IMPLEMENT PUBLIC ws2_32) diff --git a/NahidaProject.HashAlgorithm/CMakeLists.txt b/NahidaProject.HashAlgorithm/CMakeLists.txt index d15fa7c..005f56e 100644 --- a/NahidaProject.HashAlgorithm/CMakeLists.txt +++ b/NahidaProject.HashAlgorithm/CMakeLists.txt @@ -4,4 +4,4 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31 FATAL_ERROR) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules) INCLUDE(RegisterSubproject) -REGISTER_SUBPROJECT("HashAlgorithm") +REGISTER_SUBPROJECT("HashAlgorithm" FALSE) diff --git a/NahidaProject.Mathematics/CMakeLists.txt b/NahidaProject.Mathematics/CMakeLists.txt index 6cda15f..f13cc40 100644 --- a/NahidaProject.Mathematics/CMakeLists.txt +++ b/NahidaProject.Mathematics/CMakeLists.txt @@ -4,4 +4,4 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31 FATAL_ERROR) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules) INCLUDE(RegisterSubproject) -REGISTER_SUBPROJECT("Mathematics") +REGISTER_SUBPROJECT("Mathematics" FALSE) diff --git a/NahidaProject.Other/CMakeLists.txt b/NahidaProject.Other/CMakeLists.txt index cfbcb91..f7c286a 100644 --- a/NahidaProject.Other/CMakeLists.txt +++ b/NahidaProject.Other/CMakeLists.txt @@ -4,4 +4,5 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31 FATAL_ERROR) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules) INCLUDE(RegisterSubproject) -REGISTER_SUBPROJECT("Other") + +REGISTER_SUBPROJECT("Other" TRUE) diff --git a/NahidaProject.Other/Sources/__PythonExport.cxx b/NahidaProject.Other/Sources/__PythonExport.cxx new file mode 100644 index 0000000..935a91e --- /dev/null +++ b/NahidaProject.Other/Sources/__PythonExport.cxx @@ -0,0 +1,7 @@ +#include +#include "CowSay.h" + +PYBIND11_MODULE(NahidaProject_Other, m) { + pybind11::class_(m, "CowSay") + .def("Cow", &NahidaProject::CowSay::Cow, "show a cow shape in console"); +} \ No newline at end of file diff --git a/NahidaProject.Serialization/CMakeLists.txt b/NahidaProject.Serialization/CMakeLists.txt index 7c5aca8..c4f805a 100644 --- a/NahidaProject.Serialization/CMakeLists.txt +++ b/NahidaProject.Serialization/CMakeLists.txt @@ -4,4 +4,4 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31 FATAL_ERROR) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules) INCLUDE(RegisterSubproject) -REGISTER_SUBPROJECT("Serialization") +REGISTER_SUBPROJECT("Serialization" FALSE) diff --git a/NahidaProject.Thread/CMakeLists.txt b/NahidaProject.Thread/CMakeLists.txt index cf98310..f94533d 100644 --- a/NahidaProject.Thread/CMakeLists.txt +++ b/NahidaProject.Thread/CMakeLists.txt @@ -4,4 +4,4 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.31 FATAL_ERROR) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMakeModules) INCLUDE(RegisterSubproject) -REGISTER_SUBPROJECT("Thread") \ No newline at end of file +REGISTER_SUBPROJECT("Thread" FALSE) \ No newline at end of file -- Gitee From c8696876be50c9a249f328bbf741a321664ec59c Mon Sep 17 00:00:00 2001 From: HeZongLun <13425468+hezonglun@user.noreply.gitee.com> Date: Sat, 18 Oct 2025 20:23:46 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E9=80=9A?= =?UTF-8?q?=E4=BF=A1=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 5 +- Documents/NahidaProjectIcon.png | Bin 27078 -> 0 bytes .../NahidaProject-Console/ChooseDialog.md | 185 ----- .../CommandLineParser.md | 85 --- .../NahidaProject-Console/TablePrint.md | 48 -- .../NahidaProject-Console/TerminalColor.md | 271 ------- .../NahidaProject-Database/ODBC.md | 107 --- .../NahidaProject-Generic/BloomFilter.md | 166 ---- .../NahidaProject-Generic/HTTPRequest.md | 263 ------- .../NahidaProject-Generic/Logger.md | 167 ---- .../NahidaProject-Generic/NahidaProject.md | 93 --- .../NahidaProject-Generic/SortModule.md | 84 -- .../NahidaProject-Mathematics/BigInteger.md | 0 .../RandomGenerator.md | 0 .../NahidaProject-Mathematics/Statistics.md | 0 .../NahidaProject-Mathematics/Vector.md | 0 .../NahidaProject-Other/CowSay.md | 45 -- .../NahidaProject-Serialization/CSV.md | 0 .../NahidaProject-Serialization/INIReader.md | 0 .../NahidaProject-Serialization/INIWriter.md | 0 .../NahidaProject-Serialization/JSON.md | 0 .../NahidaProject-Serialization/XMLReader.md | 0 .../NahidaProject-Serialization/XMLWriter.md | 0 .../NahidaProject-Serialization/YAML.md | 0 .../DynamicLinkedLibraryInjector.md | 0 .../DynamicLinkedLibraryLoader.md | 0 .../NahidaProject-System/RegisterTable.md | 0 .../NahidaProject-System/SerialPort.md | 0 .../NahidaProject-System/WindowsService.md | 0 .../NahidaProject-Thread/EventBus.md | 0 .../NahidaProject-Thread/MemoryPool.md | 0 .../NahidaProject-Thread/SignalAndSlot.md | 0 .../NahidaProject-Thread/TaskTimer.md | 0 .../NahidaProject-Thread/ThreadPool.md | 0 .../NahidaProject-Thread/TimingWheel.md | 0 .../NahidaBenchmarkTest.md | 0 .../NahidaProject-UnitTest/NahidaMockTest.md | 0 .../NahidaProject-UnitTest/NahidaUnitTest.md | 0 NahidaProject.Communication/CMakeLists.txt | 11 + .../Sources/HTTPClient.cpp | 294 +++++++ .../Sources/HTTPClient.h | 85 +++ .../Sources/HTTPServer.cpp | 241 ++++++ .../Sources/HTTPServer.h | 91 +++ .../Sources/SerialPort.cpp | 717 ++++++++++++++++++ .../Sources/SerialPort.h | 163 ++++ .../Sources/StaticWebServer.cpp | 386 ++++++++++ .../Sources/StaticWebServer.h | 39 + .../Tests/ModuleUnitTestFile.cpp | 193 +++++ 48 files changed, 2224 insertions(+), 1515 deletions(-) delete mode 100644 Documents/NahidaProjectIcon.png delete mode 100644 Documents/PureDocument/NahidaProject-Console/ChooseDialog.md delete mode 100644 Documents/PureDocument/NahidaProject-Console/CommandLineParser.md delete mode 100644 Documents/PureDocument/NahidaProject-Console/TablePrint.md delete mode 100644 Documents/PureDocument/NahidaProject-Console/TerminalColor.md delete mode 100644 Documents/PureDocument/NahidaProject-Database/ODBC.md delete mode 100644 Documents/PureDocument/NahidaProject-Generic/BloomFilter.md delete mode 100644 Documents/PureDocument/NahidaProject-Generic/HTTPRequest.md delete mode 100644 Documents/PureDocument/NahidaProject-Generic/Logger.md delete mode 100644 Documents/PureDocument/NahidaProject-Generic/NahidaProject.md delete mode 100644 Documents/PureDocument/NahidaProject-Generic/SortModule.md delete mode 100644 Documents/PureDocument/NahidaProject-Mathematics/BigInteger.md delete mode 100644 Documents/PureDocument/NahidaProject-Mathematics/RandomGenerator.md delete mode 100644 Documents/PureDocument/NahidaProject-Mathematics/Statistics.md delete mode 100644 Documents/PureDocument/NahidaProject-Mathematics/Vector.md delete mode 100644 Documents/PureDocument/NahidaProject-Other/CowSay.md delete mode 100644 Documents/PureDocument/NahidaProject-Serialization/CSV.md delete mode 100644 Documents/PureDocument/NahidaProject-Serialization/INIReader.md delete mode 100644 Documents/PureDocument/NahidaProject-Serialization/INIWriter.md delete mode 100644 Documents/PureDocument/NahidaProject-Serialization/JSON.md delete mode 100644 Documents/PureDocument/NahidaProject-Serialization/XMLReader.md delete mode 100644 Documents/PureDocument/NahidaProject-Serialization/XMLWriter.md delete mode 100644 Documents/PureDocument/NahidaProject-Serialization/YAML.md delete mode 100644 Documents/PureDocument/NahidaProject-System/DynamicLinkedLibraryInjector.md delete mode 100644 Documents/PureDocument/NahidaProject-System/DynamicLinkedLibraryLoader.md delete mode 100644 Documents/PureDocument/NahidaProject-System/RegisterTable.md delete mode 100644 Documents/PureDocument/NahidaProject-System/SerialPort.md delete mode 100644 Documents/PureDocument/NahidaProject-System/WindowsService.md delete mode 100644 Documents/PureDocument/NahidaProject-Thread/EventBus.md delete mode 100644 Documents/PureDocument/NahidaProject-Thread/MemoryPool.md delete mode 100644 Documents/PureDocument/NahidaProject-Thread/SignalAndSlot.md delete mode 100644 Documents/PureDocument/NahidaProject-Thread/TaskTimer.md delete mode 100644 Documents/PureDocument/NahidaProject-Thread/ThreadPool.md delete mode 100644 Documents/PureDocument/NahidaProject-Thread/TimingWheel.md delete mode 100644 Documents/PureDocument/NahidaProject-UnitTest/NahidaBenchmarkTest.md delete mode 100644 Documents/PureDocument/NahidaProject-UnitTest/NahidaMockTest.md delete mode 100644 Documents/PureDocument/NahidaProject-UnitTest/NahidaUnitTest.md create mode 100644 NahidaProject.Communication/CMakeLists.txt create mode 100644 NahidaProject.Communication/Sources/HTTPClient.cpp create mode 100644 NahidaProject.Communication/Sources/HTTPClient.h create mode 100644 NahidaProject.Communication/Sources/HTTPServer.cpp create mode 100644 NahidaProject.Communication/Sources/HTTPServer.h create mode 100644 NahidaProject.Communication/Sources/SerialPort.cpp create mode 100644 NahidaProject.Communication/Sources/SerialPort.h create mode 100644 NahidaProject.Communication/Sources/StaticWebServer.cpp create mode 100644 NahidaProject.Communication/Sources/StaticWebServer.h create mode 100644 NahidaProject.Communication/Tests/ModuleUnitTestFile.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index aa671f4..756eb8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ SET(CMAKE_CXX_STANDARD 20) SET(CMAKE_CXX_STANDARD_REQUIRED ON) OPTION(BUILD_THIRDPARTY "Specific build thrid-party module" OFF) +OPTION(BUILD_COMMUNICATION "Specific build communication module" ON) OPTION(BUILD_CONSOLE "Specific build console module" ON) OPTION(BUILD_DATABASE "Specific build database module" ON) OPTION(BUILD_GENERIC "Specific build generic module" ON) @@ -13,7 +14,6 @@ OPTION(BUILD_HASHALGORITHM "Specific build hash algorithm" ON) OPTION(BUILD_MATHEMATICS "Specific mathematics module" ON) OPTION(BUILD_OTHER "Specific build other module" ON) OPTION(BUILD_SERIALIZATION "Specific build serialization module" ON) -OPTION(BUILD_SYSTEM "Specific build system module" ON) OPTION(BUILD_THREAD "Specific build thread module" ON) OPTION(BUILD_UNITTEST "Specific build unit test module" ON) @@ -32,6 +32,9 @@ ENDIF() IF(FALSE) ADD_SUBDIRECTORY("NahidaProject.ThirdParty") ENDIF() +IF(${BUILD_COMMUNICATION}) + ADD_SUBDIRECTORY("NahidaProject.Communication") +ENDIF() IF(${BUILD_CONSOLE}) ADD_SUBDIRECTORY("NahidaProject.Console") ENDIF() diff --git a/Documents/NahidaProjectIcon.png b/Documents/NahidaProjectIcon.png deleted file mode 100644 index 91464109171f407cfa576ac097bf50338c1ee867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27078 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 NahidaProject\::ChooseDialog\::MenuState\::GetSelectedOptions() |鑾峰彇鏈夊摢浜涢夐」琚変腑 | - -## 娉ㄨВ - - - -## 瑕佹眰 - -`#include "ChooseDialog.h"` - -## void NahidaProject\::ChooseDialog\::CheckboxMenu\::AddOption(const std\::wstring& optDisplayName, const std\::wstring& optDescription = L"") - -### 鍙傛暟 - -|鍚嶇О |鎻忚堪 | -|---------------|---------| -|optDisplayName |閫夐」鍚嶇О | -|optDescription |閫夐」鎻忚堪 | - -### 杩斿洖鍊 - -* 鎴愬姛: 鏃 -* 澶辫触: 鏃 - -### 澶囨敞 - -鏃 - -## void NahidaProject\::ChooseDialog\::RadioMenu\::AddOption(const std\::wstring& optDisplayName, const std\::wstring& optDescription = L"") - -### 鍙傛暟 - -|鍚嶇О |鎻忚堪 | -|---------------|---------| -|optDisplayName |閫夐」鍚嶇О | -|optDescription |閫夐」鎻忚堪 | - -### 杩斿洖鍊 - -* 鎴愬姛: 鏃 -* 澶辫触: 鏃 - -### 澶囨敞 - -鏃 - -## void NahidaProject\::ChooseDialog\::CheckboxMenu\::Execute() - -### 鍙傛暟 - -鏃 - -### 杩斿洖鍊 - -* 鎴愬姛: 鏃 -* 澶辫触: 鏃 - -### 澶囨敞 - -鏃 - -## void NahidaProject\::ChooseDialog\::RadioMenu\::Execute() - -### 鍙傛暟 - -鏃 - -### 杩斿洖鍊 - -* 鎴愬姛: 鏃 -* 澶辫触: 鏃 - -### 澶囨敞 - -鏃 - -## void NahidaProject\::ChooseDialog\::PromptMenu\::Execute() - -### 鍙傛暟 - -鏃 - -### 杩斿洖鍊 - -* 鎴愬姛: 鏃 -* 澶辫触: 鏃 - -### 澶囨敞 - -鏃 - -## BOOL NahidaProject\::ChooseDialog\::Option\::IsSelected() - -### 鍙傛暟 - -鏃 - -### 杩斿洖鍊 - -* 鎴愬姛: 杩斿洖鏁版嵁 -* 澶辫触: 娌℃湁鏁版嵁 - -### 澶囨敞 - -鏃 - -## MenuState NahidaProject\::ChooseDialog\::BasicMenu\::GetState() - -### 鍙傛暟 - -鏃 - -### 杩斿洖鍊 - -* 鎴愬姛: 杩斿洖鏁版嵁 -* 澶辫触: 娌℃湁鏁版嵁 - -### 澶囨敞 - -鏃 - -## std\::vector\