问题一:给定一个std::vector<int>类型的容器vec请使用迭代器遍历该容器,计算其中所有元素的和并输出结果。 要求:使用begin()和end()迭代器,不得使用下标访问。
时间: 2024-12-24 21:31:53 浏览: 4
在C++中,你可以使用`std::vector`的内置迭代器`begin()`和`end()`来遍历这个整数向量,并通过累加的方式计算元素之和。下面是一个示例:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {10, 20, 30, 40, 50}; // 假设这是你的向量
int sum = 0;
for (auto it = vec.begin(); it != vec.end(); ++it) {
sum += *it; // 使用解引用(*)操作获取迭代器指向的值并加入总和
}
std::cout << "Sum of all elements in the vector is: " << sum << std::endl;
return 0;
}
```
在这个代码片段中,`it`是`vec`的迭代器,`*it`表示当前迭代到的元素。每次循环都会将当前元素的值加到`sum`上,直到遍历完整个向量。
相关问题
迭代器练习 题目1: 给定一个std::vector<int>,编写一段代码,使 用迭代器将该向量中的所有奇数元素删除。请在删除 后输出剩余的元素。 要求: •使用迭代器遍历并修改向量。 •不能使用std::remove_if或其他算法函数。
迭代器练习可以这样完成:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9}; // 示例向量
// 创建一个指向向量起始位置的迭代器
auto it = vec.begin();
while (it != vec.end()) { // 遍历整个向量
if (*it % 2 != 0) { // 检查当前元素是否为奇数
// 使用前一个元素替换奇数元素,然后移动迭代器到下一个位置
if (it != vec.begin()) {
*it - 1 = *it; // 如果不是第一个元素,就向前一个元素赋值
}
++it; // 移动到下一个元素
} else {
// 如果元素是偶数,直接跳过
++it;
}
}
// 输出剩余的偶数元素
for (auto& num : vec) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
在这个例子中,我们遍历向量,当遇到奇数时,我们会把当前元素复制到它前面的位置(如果这不是第一个元素),然后跳过这个奇数元素。最后只留下偶数元素。
vector中查找元素
`vector`是C++标准模板库(STL)中的一个动态数组容器,它可以在运行时动态改变大小。在`vector`中查找元素可以使用多种方法,具体取决于你想要查找的是第一个匹配元素,还是所有匹配元素,以及是否需要遍历整个容器或者利用`vector`的有序性质。以下是一些常见的查找方法:
1. `std::find`:适用于顺序查找,如果`vector`不是有序的,使用`std::find`是查找单个元素的常规方法。它返回一个指向找到元素的迭代器,如果没有找到则返回`vector.end()`。
2. `std::find_if`:允许使用自定义的谓词函数,适用于在`vector`中查找满足特定条件的第一个元素。
3. `std::binary_search`:需要`vector`是预先排序好的。这是一个二分查找算法,非常高效,但如果`vector`未排序,则不能保证结果的正确性。
4. `std::lower_bound`和`std::upper_bound`:这两个函数通常用于有序`vector`中查找某个值的范围,`lower_bound`返回第一个不小于(即大于或等于)给定值的元素的迭代器,而`upper_bound`返回第一个大于给定值的元素的迭代器。
使用`std::find`的示例代码如下:
```cpp
#include <vector>
#include <algorithm> // for std::find
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
int value_to_find = 3;
auto it = std::find(vec.begin(), vec.end(), value_to_find);
if (it != vec.end()) {
// 找到了元素
} else {
// 没有找到元素
}
return 0;
}
```
阅读全文