网站可以做章子吗,搭建wordpress程序,电脑怎样做幻灯片的网站,智慧团建网C STL中的vector
vector是C标准模板库#xff08;STL#xff09;中最常用的序列容器之一#xff0c;它是一个动态数组#xff0c;能够存储任意类型的对象#xff08;如整数、字符串等#xff09;。vector的主要优点是提供了快速的随机访问#xff0c;同时还能够动态地调…C STL中的vector
vector是C标准模板库STL中最常用的序列容器之一它是一个动态数组能够存储任意类型的对象如整数、字符串等。vector的主要优点是提供了快速的随机访问同时还能够动态地调整大小。
基本操作 创建和初始化 #include vector
std::vectorint v1; // 创建一个空的vector
std::vectorint v2(5, 10); // 创建一个大小为5的vector每个元素初始化为10
std::vectorint v3 {1, 2, 3, 4, 5}; // 初始化列表访问元素 at(index) 和 operator[]访问指定位置的元素at会检查索引范围。front() 和 back()访问第一个和最后一个元素。 int first v3.front(); // 1
int last v3.back(); // 5
int element v3.at(2); // 3修改元素 push_back(value)在vector的末尾添加一个元素。pop_back()移除vector的最后一个元素。insert(position, value)在指定位置插入一个元素。erase(position) 或 erase(start, end)删除一个或多个元素。clear()清空所有元素。 v3.push_back(6); // v3: {1, 2, 3, 4, 5, 6}
v3.pop_back(); // v3: {1, 2, 3, 4, 5}
v3.insert(v3.begin() 2, 99); // v3: {1, 2, 99, 3, 4, 5}
v3.erase(v3.begin() 2); // v3: {1, 2, 3, 4, 5}大小和容量 size()返回当前元素的数量。capacity()返回vector在不重新分配内存的情况下可以存储的元素数量。resize(n)改变vector的大小多出的元素会被初始化。reserve(n)增加vector的容量。 size_t num_elements v3.size(); // 5
size_t capacity v3.capacity();
v3.reserve(10);遍历 使用范围for循环或迭代器。 for (int x : v3) std::cout x ;
for (auto it v3.begin(); it ! v3.end(); it) std::cout *it ;相关算法
vector可以与STL中的算法库配合使用提供强大的数据处理能力。 排序 #include algorithm
std::sort(v3.begin(), v3.end()); // 默认升序排序查找 auto it std::find(v3.begin(), v3.end(), 3);
if (it ! v3.end()) {std::cout Element found: *it std::endl;
}计数 int count std::count(v3.begin(), v3.end(), 3);删除特定元素 v3.erase(std::remove(v3.begin(), v3.end(), 3), v3.end());遍历并执行操作 std::for_each(v3.begin(), v3.end(), [](int x){ x * 2; });删除特定元素代码是C中使用的一种常见技术结合了std::remove算法和erase成员函数来从容器中删除特定的元素。这种技术通常被称为“擦除-删除”惯用法Erase-Remove Idiom。下面是详细解释
分解代码
d3.erase(std::remove(d3.begin(), d3.end(), 3), d3.end());std::remove(d3.begin(), d3.end(), 3) std::remove是一个算法它接受三个参数开始迭代器、结束迭代器和要删除的值这里是3。这个函数并不实际从容器中删除元素而是将不等于3的元素向容器的开始位置移动并返回一个新的迭代器指向移动后容器中最后一个有效元素之后的位置。也就是说所有的3都被移到了容器的末尾并且函数返回了一个指向第一个3的迭代器。 d3.erase(new_end, d3.end()) erase是一个成员函数用于从容器中实际删除元素。它接受两个迭代器作为参数要删除的元素范围的开始和结束。在这里erase函数使用从std::remove返回的迭代器指向第一个3作为起始位置到容器的结束位置d3.end()作为结束位置。这个调用将删除所有的3因为这些3现在都位于这个范围内。
效果
这行代码的效果是从容器d3中删除所有值为3的元素。这种方法比单独使用循环和条件删除更高效因为它只需要一次遍历和少量的元素移动。
注意
这种方法适用于支持快速随机访问的容器如vector、deque、array等。对于list或forward_list这类容器应使用成员函数remove因为它们提供了更为优化的删除操作。使用std::remove时容器的大小不会改变只是元素的位置发生了变化因此需要与erase结合使用来实际减少容器的大小。