相关疑难解决方法(0)

*(&arr + 1) - arr 如何给出数组 arr 元素的长度?

#include <iostream>
using namespace std;

int main() { 
   int  arr[5] = {5, 8, 1, 3, 6};
   int len = *(&arr + 1) - arr;
   cout << "The length of the array is: " << len;
   return 0;
} 
Run Code Online (Sandbox Code Playgroud)

对于上面的代码,我不太明白这两段代码是做什么的:

*(&arr + 1) 
Run Code Online (Sandbox Code Playgroud)

*(&arr)
&arr
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?因为当我运行以下两个代码时,我得到以下相同的输出:

&arr (我认为这指向arr的第一个元素的地址)

*(&arr)那么我不太明白这是做什么的,符号*&arr(即这里的地址)有什么作用?,因为当我运行它们时,两个输出是相同的

最后,当一个整数说 1 被这里的代码添加到地址时,到底发生了什么: &arr + 1

c++ arrays

8
推荐指数
1
解决办法
1475
查看次数

容器的 begin() 和 end() 的不同实现

我正在练习实施容器。我的目标是定义迭代器begin()end() 以便我可以使用for(auto x : v). 我的容器看起来像这样:

class Vector{
public:
    Vector(initializer_list<double> numbers){
        sz = numbers.size();
        elem = new double[sz];
        int i = 0;
        for (auto it = numbers.begin(); it!=numbers.end(); ++it)
            elem[i++] = *it;
    }
    ~Vector(){delete [] elem;}
    double* begin();
    double* end();
private:
    double* elem;
    int sz;
    
};
Run Code Online (Sandbox Code Playgroud)

选项1

这就是我定义迭代器的方式(它们在我的测试用例中工作得很好)

double* Vector::begin(){
    return elem;
}

double* Vector::end(){
    return &elem[sz];
}

Run Code Online (Sandbox Code Playgroud)

选项 2

这就是它们在A Tour of C++中的定义

double* Vector::begin(){
    return &elem[0];
}

double* Vector::end(){
    return &elem[0]+sz; …
Run Code Online (Sandbox Code Playgroud)

c++ containers iterator

4
推荐指数
1
解决办法
96
查看次数

标签 统计

c++ ×2

arrays ×1

containers ×1

iterator ×1