删除一个vector中后一半的元素
时间: 2024-04-16 11:29:26 浏览: 13
要删除 `std::vector` 中后一半的元素,可以使用 `erase` 函数结合迭代器来实现。下面是一个示例:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 计算要删除的元素数量
int eraseCount = nums.size() / 2;
// 删除后一半元素
nums.erase(nums.begin() + eraseCount, nums.end());
// 输出剩余的元素
for (int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
在示例中,我们创建了一个 `std::vector` 对象 `nums` 并初始化它。然后,计算需要删除的元素数量,这里使用了 `nums.size() / 2` 来计算后一半元素的数量。接下来,使用 `erase` 函数来删除后一半元素,通过指定删除范围为 `[nums.begin() + eraseCount, nums.end())` 来实现。最后,使用循环输出剩余的元素。
输出结果为:
```
1 2 3 4 5
```
这表示后一半的元素已经被成功删除,剩余的元素为 1、2、3、4 和 5。
相关问题
删除一个vector中前一半的元素
要删除 `std::vector` 中前一半的元素,可以使用 `erase` 函数结合迭代器来实现。下面是一个示例:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 计算要删除的元素数量
int eraseCount = nums.size() / 2;
// 删除前一半元素
nums.erase(nums.begin(), nums.begin() + eraseCount);
// 输出剩余的元素
for (int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
在示例中,我们创建了一个 `std::vector` 对象 `nums` 并初始化它。然后,计算需要删除的元素数量,这里使用了 `nums.size() / 2` 来计算前一半元素的数量。接下来,使用 `erase` 函数来删除前一半元素,通过指定删除范围为 `[nums.begin(), nums.begin() + eraseCount)` 来实现。最后,使用循环输出剩余的元素。
输出结果为:
```
6 7 8 9 10
```
这表示前一半的元素已经被成功删除,剩余的元素为 6、7、8、9 和 10。
java 中 ArrayList LinkedList Vector 三者的异同点
ArrayList、LinkedList、Vector 都是 Java 中的集合类,它们的主要区别如下:
1. 数据结构:ArrayList 和 Vector 都是基于数组实现的,而 LinkedList 是基于链表实现的。
2. 线程安全性:Vector 是线程安全的,而 ArrayList 和 LinkedList 不是线程安全的。
3. 插入和删除操作:ArrayList 和 Vector 在插入或删除元素时,如果不是从末尾进行操作,需要对后面的元素进行位移,所以效率较低;而 LinkedList 在插入和删除元素时,只需要修改指针指向,效率较高。
4. 访问操作:ArrayList 和 Vector 可以根据下标进行随机访问,而 LinkedList 只能从头或者尾开始进行遍历。
5. 扩容机制:ArrayList 和 Vector 在元素添加时,如果超过了容量,需要扩容,扩容的策略是增加原来容量的一半;而 LinkedList 不需要扩容。
综上所述,如果需要线程安全的集合类,可以使用 Vector;如果需要进行大量随机访问,可以使用 ArrayList;如果需要进行大量插入和删除操作,可以使用 LinkedList。