寿光市住房和建设局网站,135网站模板,公司搭建一个网站需要多少钱,易烊千玺网页设计模板代码cSTL容器的使用#xff08;vector, list, map, set等#xff09; 在C的STL#xff08;Standard Template Library#xff09;中#xff0c;容器是重要的一部分#xff0c;它们提供了各种数据结构来存储和管理数据。以下是一些常见的STL容器及其使用方法的简要说明#x…cSTL容器的使用vector, list, map, set等 在C的STLStandard Template Library中容器是重要的一部分它们提供了各种数据结构来存储和管理数据。以下是一些常见的STL容器及其使用方法的简要说明
Vector向量 std::vector 是一个动态数组可以动态地添加和删除元素。
#include vector
#include iostream int main() { // 创建一个空的vector std::vectorint vec; // 向vector中添加元素 vec.push_back(1); vec.push_back(2); vec.push_back(3); // 访问元素 std::cout First element: vec[0] std::endl; // 遍历vector for (const auto elem : vec) { std::cout elem ; } // 删除元素 vec.pop_back(); // 删除最后一个元素 return 0;
}List列表 std::list 是一个双向链表提供了高效的插入和删除操作。
#include list
#include iostream int main() { // 创建一个空的list std::listint lst; // 向list中添加元素 lst.push_back(1); lst.push_front(0); // 遍历list for (const auto elem : lst) { std::cout elem ; } // 删除元素 lst.remove(1); // 删除所有值为1的元素 return 0;
}Map映射 std::map 是一个关联容器它存储的元素是键值对并按键进行排序。
#include map
#include iostream int main() { // 创建一个空的map std::mapstd::string, int m; // 向map中添加元素 m[apple] 1; m[banana] 2; // 访问元素 std::cout Apple count: m[apple] std::endl; // 遍历map for (const auto pair : m) { std::cout pair.first : pair.second std::endl; } // 删除元素 m.erase(banana); // 删除键为banana的元素 return 0;
}Set集合 std::set 是一个关联容器它存储的元素是唯一的并按值进行排序。
#include set
#include iostream int main() { // 创建一个空的set std::setint s; // 向set中添加元素 s.insert(1); s.insert(2); s.insert(1); // 这个元素不会被插入因为set中不允许重复 // 遍历set for (const auto elem : s) { std::cout elem ; } // 删除元素 s.erase(1); // 删除值为1的元素 return 0;
}在使用这些STL容器时通常会用到一些通用的STL算法如std::sort排序std::find查找std::for_each对容器中每个元素执行操作等。此外容器还提供了很多成员函数来操作元素如push_backpop_backinserterasebeginend等。
cSTL算法的理解与使用sort, find, binary_search等
C的STLStandard Template Library提供了一系列算法这些算法可以与STL容器配合使用以执行各种常见的任务如排序、查找和搜索。以下是对一些常见STL算法的理解与使用的简要说明
std::sort排序 std::sort是一个通用排序算法可以对任何提供随机访问迭代器的序列进行排序。
#include algorithm
#include vector
#include iostream int main() { std::vectorint numbers {4, 2, 5, 3, 1}; // 使用std::sort对vector进行排序 std::sort(numbers.begin(), numbers.end()); // 输出排序后的vector for (const auto num : numbers) { std::cout num ; } return 0;
}std::find查找 std::find用于在序列中查找特定元素。如果找到则返回指向该元素的迭代器否则返回序列的尾迭代器。
#include algorithm
#include vector
#include iostream int main() { std::vectorint numbers {1, 2, 3, 4, 5}; int target 3; // 使用std::find查找target auto it std::find(numbers.begin(), numbers.end(), target); if (it ! numbers.end()) { std::cout Found target at position: std::distance(numbers.begin(), it) std::endl; } else { std::cout target not found std::endl; } return 0;
}std::binary_search二分查找 std::binary_search用于在已排序的序列中执行二分查找。它要求序列必须是已排序的否则结果将是未定义的。
#include algorithm
#include vector
#include iostream int main() { std::vectorint numbers {1, 2, 3, 4, 5}; int target 3; // 确保序列已排序 std::sort(numbers.begin(), numbers.end()); // 使用std::binary_search进行查找 bool found std::binary_search(numbers.begin(), numbers.end(), target); if (found) { std::cout target found in the sorted sequence std::endl; } else { std::cout target not found std::endl; } return 0;
}使用注意事项 std::sort默认使用操作符来比较元素但也可以传递自定义比较函数或lambda表达式。 std::find和std::binary_search返回的都是迭代器需要与容器的开始迭代器比较来确定是否找到了目标元素。 std::binary_search要求序列必须是已排序的否则会返回未定义的结果。 这些算法都提供了很大的灵活性因为它们是模板化的可以与任何类型的容器一起使用只要这些容器提供适当的迭代器类型。此外它们也可以很容易地与C的lambda表达式结合使用以提供自定义的比较逻辑。