Cpp 向量插入的意外结果
Unexpected Result with Cpp Vector insert
我有以下功能
void rotate(vector<int>& nums, int k) {
int original_size = nums.size();
k = k%original_size;
nums.insert(nums.begin(), nums.end()-k, nums.end());
nums.resize(original_size);
}
对于这些输入,我得到了正确的结果
[1,2,3,4,5,6,7]
3
----
[5,6,7,1,2,3,4]
============
[-1]
2
----
[-1]
但是,对于下面的输入,我得到了错误的结果。
[1,2,3]
1
----
[2,1,2]
nums.insert(nums.begin(), nums.end()-k, nums.end());
似乎在前两个示例中正常工作,但在第三个示例中却不行。我想不出为什么会这样。
您不能将 insert
与 first
和 last
作为同一向量的迭代器一起使用。那是因为插入元素会使迭代器失效。来自 cppreference(重载 4):
The behavior is undefined if first
and last
are iterators into *this
.
您可以使用 std::rotate
旋转向量中的元素。
我有以下功能
void rotate(vector<int>& nums, int k) {
int original_size = nums.size();
k = k%original_size;
nums.insert(nums.begin(), nums.end()-k, nums.end());
nums.resize(original_size);
}
对于这些输入,我得到了正确的结果
[1,2,3,4,5,6,7]
3
----
[5,6,7,1,2,3,4]
============
[-1]
2
----
[-1]
但是,对于下面的输入,我得到了错误的结果。
[1,2,3]
1
----
[2,1,2]
nums.insert(nums.begin(), nums.end()-k, nums.end());
似乎在前两个示例中正常工作,但在第三个示例中却不行。我想不出为什么会这样。
您不能将 insert
与 first
和 last
作为同一向量的迭代器一起使用。那是因为插入元素会使迭代器失效。来自 cppreference(重载 4):
The behavior is undefined if
first
andlast
are iterators into*this
.
您可以使用 std::rotate
旋转向量中的元素。