如何在不使用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
。
答案 0 :(得分:0)
对于类型为a
的数组T[N]
,您可以轻松地分别以a
和a+N
的形式获取“ begin”和“ end”,您将能够毫无问题地替代。
也就是说,将begin
和end
从C ++ 11反向移植到C ++ 03非常容易。我自己使用cppreference中的information about the functions作为指导。