东莞网站建设企业,做外汇的人一般看什么网站,网站建设完成,什么建网站免费文章目录 一、题目链接二、参考代码三、所思所悟 一、题目链接
链接: 27. 移除元素 二、参考代码
思路1#xff1a;找到需要移除的数组元素#xff0c;将右侧全部元素向左覆盖
int removeElement(vectorint nums, int val) {int size nums.size();for (int … 文章目录 一、题目链接二、参考代码三、所思所悟 一、题目链接
链接: 27. 移除元素 二、参考代码
思路1找到需要移除的数组元素将右侧全部元素向左覆盖
int removeElement(vectorint nums, int val) {int size nums.size();for (int i 0; i size; i) {if (nums[i] val) {for (int j i 1; j size; j) {nums[j - 1] nums[j];}i--;size--;}}return size;}思路2使用两个下标来进行遍历当遇到需要移除的数组元素slow下标不动fast下标进行前进当遇到不需要移除数组元素时将元素放入并且两个下标进行前进
int removeElement(vectorint nums, int val) {int fastindex 0, slowindex 0;for (; fastindex nums.size(); fastindex) {if (nums[fastindex] ! val) {nums[slowindex] nums[fastindex];}}return slowindex;}思路3使用库函数后面有库函数具体解释
int removeElement(vectorint nums, int val) {auto newEnd remove(nums.begin(), nums.end(), val);nums.erase(newEnd, nums.end());return nums.size();}三、所思所悟
std::remove 定义在 头文件中。它的目的是移除容器中所有等于给定值的元素但它并不实际从容器中删除这些元素而是将它们“移动”到容器的末尾并返回一个指向新逻辑末尾的迭代器。这个新逻辑末尾是第一个应该被移除的元素的位置。 工作原理
remove 遍历整个容器寻找等于给定值 val 的元素。它不直接删除这些元素而是将所有不等于 val 的元素向前移动覆盖那些等于 val 的元素。这个过程会一直进行直到遍历完整个容器。最终所有不等于 val 的元素都会被移动到容器的开始位置而所有等于 val 的元素都会被移到容器的末尾。remove 返回一个指向新逻辑末尾的迭代器即第一个应该被移除的元素的位置。
std::vectorint v {1, 2, 3, 4, 3, 3, 5};
auto newEnd std::remove(v.begin(), v.end(), 3);在这个例子中std::remove 会将除了 3 以外的所有元素移动到 v 的开始位置返回的 newEnd 迭代器会指向第一个 3 的位置。
std::erase erase 是 std::vector以及其他容器的一个成员函数用于从容器中删除元素或一系列元素。 1.erase(pos,n); 删除从下标pos开始的n个字符比如erase(0,1)就是删除第一个字符 2.erase(position); 删除postion处的一个字符position是一个string类型的迭代器 3.erase(first,last) 删除从first到last之间的字符first和last都是迭代器
工作原理
erase 接受一个或两个迭代器作为参数这两个迭代器定义了要删除的元素范围。如果只提供一个迭代器erase 会删除该迭代器指向的单个元素。如果提供两个迭代器erase 会删除从第一个迭代器到第二个迭代器不包括第二个迭代器之间的所有元素。erase 会将所有后续的元素向前移动填补被删除元素留下的空间。erase 返回一个指向被删除元素之后元素的迭代器。
std::vectorint v {1, 2, 3, 4, 5};
v.erase(v.begin() 2); // 删除第三个元素值为3在这个例子中std::remove 将所有不等于 3 的元素移动到 v 的开始位置并返回一个指向第一个 3 的迭代器。然后 erase 删除从这个迭代器到 v.end() 之间的所有元素包括所有的 3。最终 v 变为 {1, 2, 4, 5}。