所以我在某处发布了一个贴出的代码:
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
if(nums.size() == 0) return NULL;
int mid=nums.size()/2;
TreeNode* root = new TreeNode(nums[mid]);
auto it=nums.begin()+1;
cout<<*it;
vector<int> left(nums.begin(),nums.begin()+mid);
vector<int> right(nums.begin()+mid+1,nums.end());
root->left=sortedArrayToBST(left);
root->right=sortedArrayToBST(right);
return root;
}
让样本输入为[1,2,3,4]
因此,当我打印迭代器时,它给出了答案为3
另外,在创建子数组时,创建的子数组由元素[1,2]组成。我在这里感到困惑,不应该将子数组设为[1,2,3],因为nums.begin()+ middle会指向元素3吗?我想我有一个非常基本和天真的怀疑,有人可以清楚这一点 谢谢
答案 0 :(得分:2)
C ++通常使用一个系统,其中&#34;开始&#34;迭代器指向 要包含在结果中的第一个项目,但是&#34; end&#34;迭代器指向过去要包含在结果中的最后一项。
现在还有一个小问题:你真的想要使用像vector_view
(又名array_view
,又名span
)这样的东西,它提供了对现有数据的类似矢量的访问,而不是复制它 - 因为它会比任何真正的需要慢得多)。如果你没有那个,你可以实现自己的一个,或者只传递一个指针/迭代器和一个长度。
答案 1 :(得分:1)
带有两个迭代器参数first
和last
的{{3}}复制从first
开始但不包括last
的范围内的所有元素}。
考虑将vector<T>::begin()
和vector<t>::end()
传递给此构造函数的情况 - vector<t>::end()
引用一个超出数组末尾的元素,并且实际上不能解除引用,因此迭代器范围通常指定为[first, last)
(不包括last
),而不是[first, last]
(包括last
)。