【发布时间】:2021-02-04 14:47:25
【问题描述】:
我看到许多函数需要数组/向量的开始和结束位置。 我有两个疑问,一个在数组中,第二个在向量中:
- 此代码
#include<iostream>
using namespace std;
int main(){
int arr[4] = {5, 3, 4, 7};
sort(begin(arr), end(arr));
for(int& x : arr) cout << x << " ";
return 0;
}
很好,因为 .begin() 和 .end() 分别返回指向数组的第一个和最后一个元素的指针(顺便说一句,如果我在任何地方错了,请纠正我)。
但是请解释一下这段代码是如何工作的:
#include<iostream>
using namespace std;
int main(){
int arr[4] = {5, 3, 4, 7};
sort(arr, arr + 4);
for(int& x : arr) cout << x << " ";
return 0;
}
- 我知道如果您想对整个向量进行排序(或执行任何其他功能),您可以使用 .begin() 和 .end()。
但是,如果您只想对向量的一部分进行排序怎么办?就像左侧位置 L 和右侧位置 R 之间的向量一样。您将如何仅使用 .begin 和 .end 来做到这一点(不切片向量)?
非常感谢!
【问题讨论】:
-
这个概念很简单,你不会在部分向量排序的情况下使用
.end()。您也不必从.begin()开始。.end()不是最后一个元素。使用<iterator>或std::array可以更好地编写您的 C 数组代码示例。 -
这能回答你的问题吗? What are Iterators, C++?
-
int arr[4]没有没有.begin()、.end()或任何其他成员。所以你发布的第一段代码不可能是“好的”。估计你抄错了。请粘贴实际代码。