iOS开发:如何用NSLog打印C++二维向量及访问自定义向量属性
解答:iOS开发中C++向量的NSLog打印与自定义类型访问问题
一、用NSLog打印C++二维向量数组
NSLog是Objective-C的日志工具,没法直接识别C的vector容器,得手动遍历数组里的每个元素,把C类型转成Objective-C支持的格式再打印。先提醒一句:一定要把你的.m文件改成.mm后缀,不然没法编译C++代码。
举个具体例子,假设你有一个vector<vector<long>>类型的二维数组:
#include <vector> using namespace std; // 初始化一个二维向量 vector<vector<long>> twoDVector = { {10, 20}, {30, 40}, {50, 60} }; // 遍历打印每一行 for (auto &row : twoDVector) { NSString *rowContent = @""; for (long num : row) { rowContent = [rowContent stringByAppendingFormat:@"%ld ", num]; } NSLog(@"二维向量行内容:%@", rowContent); }
如果是固定2列的二维向量,也可以直接通过索引快速打印:
for (int i = 0; i < twoDVector.size(); i++) { NSLog(@"第%d行:(%ld, %ld)", i, twoDVector[i][0], twoDVector[i][1]); }
二、自定义point类型的访问与打印问题
首先要纠正一个点:标准C++的vector模板是vector<T, Allocator>,第二个参数是内存分配器,不是维度。所以你这里的vector<long,2>应该是自定义的二维向量类型(比如自己封装的结构体/类,或者第三方库的实现),不是STL标准容器。
1. 访问x/y属性的常见方式
根据自定义类型的实现,访问x/y通常有三种情况:
- 直接访问成员变量:如果类型里定义了
x、y公开成员,直接用p.x、p.y - 通过索引访问:如果重载了
operator[],可以用p[0](代表x)、p[1](代表y) - 通过成员函数获取:比如提供了
getX()、getY()这类方法
举个模拟的自定义类型例子:
template<typename T, int Dim> struct CustomVector { T coords[Dim]; // 重载索引运算符 T& operator[](int idx) { return coords[idx]; } // 或者直接暴露成员 T x; T y; }; typedef CustomVector<long,2> point;
那访问坐标时可以这样写:
point p; // 方式1:用索引 long xVal = p[0]; long yVal = p[1]; // 方式2:直接访问成员变量 long xVal2 = p.x; long yVal2 = p.y;
2. 用NSLog打印point变量
NSLog没法直接打印自定义C++类型,需要先取出x/y的值再拼接成Objective-C支持的格式:
// 假设用索引访问 NSLog(@"Point坐标:(%ld, %ld)", p[0], p[1]); // 如果是直接访问成员变量 NSLog(@"Point坐标:(%ld, %ld)", p.x, p.y);
内容的提问来源于stack exchange,提问作者ddwdwwf drewret
相关产品推荐
相关产品推荐

