Maison >développement back-end >C++ >Comment convertir un conteneur C++ STL en d'autres types ?
En C++, les moyens de convertir un conteneur STL vers un autre type incluent la copie ou la conversion d'éléments dans un autre conteneur à l'aide d'algorithmes standard tels que std::copy. Utilisez un adaptateur de conteneur (tel que std::list) pour envelopper le conteneur afin d'obtenir une interface différente. Écrivez des fonctions personnalisées pour effectuer des transformations complexes ou des opérations spécifiques.
La bibliothèque de modèles standard (STL) en C++ fournit une série de conteneurs puissants qui fournissent des mécanismes pour un stockage et un accès efficaces aux données. Parfois, vous devrez peut-être convertir ces conteneurs en d'autres types pour un traitement ultérieur ou une intégration dans d'autres systèmes. Cet article décrit plusieurs façons de convertir des conteneurs STL en d'autres types en C++.
La bibliothèque standard C++ fournit des algorithmes tels que std::copy
et std::transform
, qui peuvent être utilisés pour copier ou copier éléments dans un conteneur Convertir en un autre conteneur. std::copy
和 std::transform
等算法,可用于将容器中的元素复制或转换到另一个容器中。
// 将 vector<int> 转换为 deque<int> #include <vector> #include <deque> #include <algorithm> int main() { std::vector<int> myVector{1, 2, 3, 4, 5}; std::deque<int> myDeque; std::copy(myVector.begin(), myVector.end(), std::back_inserter(myDeque)); return 0; }
容器适配器是 C++ 中一种特殊的机制,它允许您使用一种类型的容器的接口访问另一种类型的容器。std::list
容器适配器可将任意容器包装成双向链表。
// 将 vector<int> 转换为 list<int> #include <vector> #include <list> #include <algorithm> int main() { std::vector<int> myVector{1, 2, 3, 4, 5}; std::list<int> myList(myVector.begin(), myVector.end()); return 0; }
您可以编写自己的函数来转换容器。此方法对复杂转换或执行特定操作很有用。
// 将 vector<int> 转换为 map<int, int>,其中键为元素本身,值为 0 #include <vector> #include <map> #include <functional> int main() { std::vector<int> myVector{1, 2, 3, 4, 5}; std::map<int, int> myMap; std::transform(myVector.begin(), myVector.end(), std::inserter(myMap, myMap.end()), std::bind(std::make_pair<int, int>, std::placeholders::_1, 0)); return 0; }
假设您有一个 std::vector7c07761aae243fb25620b0fe3de0dd1a
,其中包含一组文件路径。您需要将此向量转换为 std::unordered_set7c07761aae243fb25620b0fe3de0dd1a
类型的无序集合,以便快速检查文件的唯一性。
您可以使用以下代码:
#include <vector> #include <unordered_set> #include <algorithm> int main() { std::vector<std::string> filePaths{"file1.txt", "file2.txt", "file3.txt", "file1.txt"}; std::unordered_set<std::string> uniqueFilePaths; std::copy(filePaths.begin(), filePaths.end(), std::inserter(uniqueFilePaths, uniqueFilePaths.end())); return 0; }
这个代码将遍历文件路径的向量,并使用 std::copy
算法将它们插入到无序集合中。std::inserter
rrreee
std::list
peut envelopper n'importe quel conteneur dans une liste doublement chaînée. 🎜rrreee🎜Utilisation de fonctions personnalisées🎜🎜Vous pouvez écrire votre propre fonction pour convertir des conteneurs. Cette méthode est utile pour des transformations complexes ou pour effectuer des opérations spécifiques. 🎜rrreee🎜Cas pratique🎜🎜Supposons que vous ayez un std::vector7c07761aae243fb25620b0fe3de0dd1a
qui contient un ensemble de chemins de fichiers. Vous devez convertir ce vecteur en un ensemble non ordonné de type std::unordered_set7c07761aae243fb25620b0fe3de0dd1a
pour vérifier rapidement l'unicité du fichier. 🎜🎜Vous pouvez utiliser le code suivant : 🎜rrreee🎜Ce code parcourra un vecteur de chemins de fichiers et les insérera dans un ensemble non ordonné à l'aide de l'algorithme std::copy
. std::inserter
est un objet fonction spécial qui vous permet d'insérer des éléments dans un conteneur. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!