Loading

如何保留std::vector的最后一个元素

前言

希望std::vector保留末尾元素并清除其他,怎么做最优雅?

尝试

比较容易想到的方法是先清除后添加

std::vector<int> vec{1,2,3,4};
int last = vec.back();
vec.clear();
vec.emplace_back(last);

可以,还想看看别的方法?

std::vector<int> vec{1,2,3,4};
vec.erase(inner_points.begin(), inner_points.end() - 1);

看起来优雅多了,又没有更短的?

插曲

不如问问NewBing怎么看?

好吧,要不是看他头头是道我差点都信了……
看看GodBolt怎么说?

// Type your code here, or load an example.
#include <vector>
#include <iostream>
int main()
{
    std::vector vec{0,1,2,3};
    vec.resize(1, vec.back());
    for(int e: vec)
    {
        std::cout << e << std::endl;
    }
    return 0;
}
// output: 0

看看文献std::vector::resize(size_type count, const value_type& value)方法分两种情况讨论:

  • count < size 只能从末尾开始删除元素,且vlaue无效
  • count > size 从末尾开始用value对容器进行填充

结论

现阶段GPT写的代码还是要认真检查下再用……

参考

std::vector<T,Allocator>::resize - cppreference.com

posted @ 2023-05-15 17:18  azureology  阅读(199)  评论(0)    收藏  举报