如果要在一个循环中将vector中的奇数位元素全部删除,应该怎么做,需要注意什么?
时间: 2024-09-28 15:09:58 浏览: 51
C++中map和vector作形参时如何给定默认参数?
5星 · 资源好评率100%
要在循环中删除 `std::vector` 中的奇数位置(从0开始计数)的元素,你可以使用双指针技巧,同时遍历 vector。一个指针用于访问元素,另一个指针用于标记下一个保留的位置。当遇到奇数索引时,跳过该元素。
以下是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
void remove_odd_indices(std::vector<int>& vec) {
int keep_index = 0; // 用来记录下个要保留的元素的索引
for (size_t i = 0; i < vec.size(); ++i) {
if ((i + 1) % 2 == 0) { // 如果索引为偶数,则保留
vec[keep_index++] = vec[i]; // 将元素移动到新位置
}
}
// 如果有剩余空间,缩短向量大小
vec.resize(keep_index);
}
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
remove_odd_indices(numbers);
// 输出结果(删除了奇数位置的元素)
for (const auto& num : numbers) {
std::cout << num << " ";
}
return 0;
}
```
注意事项:
1. 当删除元素时,你需要确保向后移动其他元素以填补空缺。上述代码使用了 `vec[keep_index++]` 来达到这个目的。
2. 使用 `resize` 函数的时候,确保不要超出向量的实际容量,否则可能会导致内存错误。
3. 对于非整数类型的数据,你可能需要修改条件判断,比如用 `!(i % 2)` 或 `(i & 1)`。
4. 如果不希望改变原向量,可以在处理前复制一份再操作副本。
阅读全文