C++中vector<vector<>>工作原理及count()、find()函数用法咨询
关于vector<vector>的count()、find()使用问题解答
一、vector<vector>的基础逻辑
vector<vector<int>>是嵌套的动态容器:外层的vector存储的是一个个独立的vector<int>对象,每个子vector都是可以动态扩容的整数数组,本质上和普通vector<int>的工作逻辑一致,只是外层容器的元素类型变为了vector<int>。
二、统计所有元素中3的总数
需要遍历外层容器的每个子vector,对每个子容器单独用std::count统计目标值的数量,最后累加结果:
#include <vector> #include <algorithm> #include <iostream> int main() { std::vector<std::vector<int>> v = {{1,3},{2,3}}; int total_3 = 0; // 遍历每个子vector for (const auto& sub_vec : v) { // 统计当前子vector中3的数量并累加 total_3 += std::count(sub_vec.begin(), sub_vec.end(), 3); } std::cout << "所有元素中3的总数:" << total_3 << std::endl; // 输出2 return 0; }
三、找到第一个包含3的子vector
不能直接用std::find,因为std::find默认是在外层容器中寻找和目标值完全相等的子vector(比如找一个和{1,3}完全一样的子容器)。要找包含3的子容器,需要用std::find_if搭配自定义判断逻辑:
#include <vector> #include <algorithm> #include <iostream> int main() { std::vector<std::vector<int>> v = {{1,3},{2,3}}; // 用find_if找第一个满足条件的子vector auto target_it = std::find_if(v.begin(), v.end(), [](const std::vector<int>& sub_vec) { // 判断当前子vector中是否存在3 return std::find(sub_vec.begin(), sub_vec.end(), 3) != sub_vec.end(); }); if (target_it != v.end()) { std::cout << "第一个包含3的子vector元素:"; for (int num : *target_it) { std::cout << num << " "; } std::cout << std::endl; // 输出1 3 } else { std::cout << "未找到包含3的子vector" << std::endl; } return 0; }
四、你之前调用find出错的原因
你尝试的两种写法都会报错,核心问题是类型不匹配或逻辑错误:
find(v.begin(), v.end(), v[0][1]):外层容器的元素是vector<int>类型,但你传入的目标是int类型(v[0][1]是整数3),编译器无法比较vector<int>和int,直接触发类型错误。find(v.begin(), v.end(), {v[0][1]}):这里构造了一个临时的vector<int>{3},find会在外层容器中寻找完全等于这个临时容器的子vector,但你的外层容器里的子容器是{1,3}和{2,3},都和{3}不相等,不仅找不到目标,逻辑也不符合你“找包含3的子容器”的需求。
内容的提问来源于stack exchange,提问作者long long
相关产品推荐
相关产品推荐

