21xrx.com
2024-11-25 01:10:01 Monday
登录
文章检索 我的文章 写文章
C++ STL 容器中使用模板函数
2023-07-03 01:24:11 深夜i     --     --
C++ STL 容器 模板函数 泛型编程

C++ STL(Standard Template Library)容器是一组常用的数据结构,例如向量、列表、映射、队列等。STL容器是在C++标准库中实现的,它们提供了方便的访问数据的方法,并额外提供了许多有用的函数,以简化开发人员的工作。

模板函数是一种通用的函数,可以用于处理不同类型的数据。在STL容器中使用模板函数可以更灵活地操作数据。例如,可以使用模板函数来计算向量的平均值、查找映射中的键值、对列表进行排序等。

下面是使用模板函数操作STL容器的示例:

向量(vector)是一个动态数组,可以通过push_back()函数向其添加元素。下面是使用模板函数计算向量平均值的示例:


#include <iostream>

#include <vector>

#include <numeric>

template <typename T>

double average(std::vector<T> const& v) {

  return static_cast<double>(std::accumulate(v.begin(), v.end(), T{})) / v.size();

}

int main() {

  std::vector<int> v 4;

  std::cout << "Average: " << average(v) << std::endl;

  return 0;

}

列表(list)是一个双向链表,可以通过push_back()、push_front()函数向其添加元素。下面是使用模板函数对列表进行排序的示例:


#include <iostream>

#include <list>

#include <algorithm>

template <typename T>

void sortList(std::list<T>& l) {

  l.sort();

}

int main() {

  std::list<int> l 2;

  sortList(l);

  for (auto const& i : l)

    std::cout << i << " ";

  

  return 0;

}

映射(map)是一个关联数组,存储键-值对。可以使用[]运算符向其中添加元素。下面是使用模板函数查找映射中的键值的示例:


#include <iostream>

#include <map>

template <typename T1, typename T2>

bool findKey(std::map<T1, T2> const& m, T1 const& k) {

  return m.find(k) != m.end();

}

int main() {

  std::map<char, int> m{ 'a', 2, 3 };

  std::cout << "Found key 'a': " << std::boolalpha << findKey(m, 'a') << std::endl;

  std::cout << "Found key 'd': " << std::boolalpha << findKey(m, 'd') << std::endl;

  return 0;

}

总而言之,使用模板函数可以使STL容器更灵活、更方便。程序员可以通过模板函数处理不同类型的数据,并且可以通过容器提供的有用函数轻松完成大部分任务。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复