C ++ 0x数组迭代器,不使用开始/结束

时间:2018-08-02 13:59:50

标签: c++ arrays iterator c++03

如何在不使用std::begin()std::end()的情况下将成对的C ++数组转换为迭代器?

上下文: 我正在尝试使用第一个元素对数组进行排序(可以假定是唯一的)。按照here的说明,其中使用了向量:

int main()
{
vector<pair <int,int>> vect;

int arr[] = {10, 20, 5, 40 };
int arr1[] = {30, 60, 20, 50};

for (int i=0; i<4; i++)
    vect.push_back(make_pair(arr[i],arr1[i]));

sort(vect.begin(), vect.end());
return 0;
}

尽管我事先知道数组的大小,所以(除了在resize上调用vect之外),我想按照以下方式进行操作:

int main()
{
auto *p_arr = (pair<int, int>*) malloc(4 * sizeof(pair<int, int>));

int arr[] = {10, 20, 5, 40 };
int arr1[] = {30, 60, 20, 50};

for (int i=0; i<4; i++)
    p_arr[i] = make_pair(arr[i],arr1[i]);

sort(begin(p_arr), end(p_arr));
return 0;
}

但是,C ++ 0x没有begin()end()。另外,我的实际代码在函数中定义了此函数,并在外部提供了数组的大小,因此我也无法执行pair <int, int>[4] vect;,不确定是否相关。

请问我的问题。除了begin()end()以外,还有其他选择吗?还是我应该坚持使用vector解决问题?

编辑:为清楚起见,在第二个代码示例中将变量名称从vect更改为p_arr

1 个答案:

答案 0 :(得分:0)

对于类型为a的数组T[N],您可以轻松地分别以aa+N的形式获取“ begin”和“ end”,您将能够毫无问题地替代。

也就是说,将beginend从C ++ 11反向移植到C ++ 03非常容易。我自己使用cppreference中的information about the functions作为指导。