C++中vector的地址

2018-09-01  本文已影响0人  战斗力五只鹅

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";

输出结果.png
由此可见,数组和数组中第0个元素,地址相同;而向量和向量第0个元素,地址不同。
上一篇 下一篇

猜你喜欢

热点阅读