LeetCode题目832,给定一个二进制矩阵 A,先水平翻转图像,然后反转图像并返回结果。
解法比较简单,但在解题过程中遇到一个vector相关的问题。当使用锯齿向量时,先添加子向量,再给子向量添加元素;和先给子向量添加元素,再添加子向量,得到的结果是不同的:
vector<vector<int>> result;
for (int i = 0; i < A.size(); i++)
{
vector<int> r;
// 若先添加r,再向r中添加元素,则得到的result是四个空vector
// result.push_back(r);
for (int j = A[i].size() - 1; j >= 0; j--)
{
int num = A[i][j] == 0 ? 1 : 0;
r.push_back(num);
}
// 若先向r中添加元素,再添加r,则是正确结果
result.push_back(r);
// 并且这里的两个地址不相同。
cout << &r << "\n";
cout << &result[i] << "\n\n";
}
return result;
因为以前只用过数组,数组的地址即是数组第0个元素的地址,向量的话则是不了解。为解决这个疑问,测试数组(用来作对比)和向量的首地址:
int arrInt[] = {1, 2};
cout << &arrInt << "\n";
cout << &arrInt[0] << "\n\n";
vector<int> vecInt = { 1, 2 };
cout << &vecInt << "\n";
cout << &vecInt[0] << "\n\n";
![](https://img.haomeiwen.com/i7155359/49dd2877af95ae2c.png)
由此可见,数组和数组中第0个元素,地址相同;而向量和向量第0个元素,地址不同。
网友评论