多层复合关系中通过vec3对象访问vec1成员变量x的方法
访问嵌套vector中vec1的x变量的方法
要通过v3对象访问并打印vec1的x变量,核心是逐层遍历嵌套的vector容器,你主要会用到vector的以下成员函数:
常用的vector成员函数
begin()/end():获取容器的起始和结束迭代器,用于遍历容器内的元素(范围for循环底层也依赖这两个函数)。operator[]:通过下标直接访问指定位置的元素,语法简洁但不做越界检查。at():和operator[]功能类似,但会执行越界检查,访问超出范围的元素时会抛出std::out_of_range异常,更安全。size():获取容器内的元素个数,用来确定循环的边界。
具体代码示例
首先要注意:你当前创建的v3对象是空的(v3.v2没有任何元素),所以需要先往里面添加数据才能访问x。下面是完整的示例代码:
步骤1:填充数据
#include <iostream> #include <vector> class vec1{ public: int x; vec1(int n):x(n){} }; class vec2{ public: std::vector<vec1> v1; }; class vec3{ public: std::vector<vec2> v2; }; int main() { vec3 v3; // 给v3添加测试数据 vec2 v2_1; v2_1.v1.push_back(vec1(10)); v2_1.v1.push_back(vec1(20)); v3.v2.push_back(v2_1); vec2 v2_2; v2_2.v1.push_back(vec1(30)); v2_2.v1.push_back(vec1(40)); v3.v2.push_back(v2_2); // 接下来是打印x的代码
方法1:范围for循环(最简洁,依赖begin()/end())
// 遍历v3.v2中的每个vec2对象 for (const auto& vec2_obj : v3.v2) { // 遍历当前vec2对象中的v1容器(vector<vec1>) for (const auto& vec1_obj : vec2_obj.v1) { std::cout << vec1_obj.x << " "; } } std::cout << std::endl;
方法2:显式迭代器循环(直接调用begin()/end())
// 遍历v3.v2的迭代器 for (auto vec2_it = v3.v2.begin(); vec2_it != v3.v2.end(); ++vec2_it) { // 遍历当前vec2对象中v1的迭代器 for (auto vec1_it = vec2_it->v1.begin(); vec1_it != vec2_it->v1.end(); ++vec1_it) { std::cout << vec1_it->x << " "; } } std::cout << std::endl;
方法3:下标访问+size()控制循环
// 遍历v3.v2的每个元素下标 for (size_t i = 0; i < v3.v2.size(); ++i) { // 遍历当前vec2对象中v1的每个元素下标 for (size_t j = 0; j < v3.v2[i].v1.size(); ++j) { // 用operator[]访问 std::cout << v3.v2[i].v1[j].x << " "; // 或者用at()做安全访问 // std::cout << v3.v2.at(i).v1.at(j).x << " "; } } std::cout << std::endl; return 0; }
以上三种方法都能成功打印出vec1的x变量,你可以根据场景选择:
- 优先用范围for循环,代码最简洁易读;
- 需要更精细的迭代控制时用显式迭代器;
- 追求访问安全性时用
at()代替operator[]。
内容的提问来源于stack exchange,提问作者Santosh Sahu
相关产品推荐
相关产品推荐

