【c++】编程心得

  • 在使用模板的时候要看情况,判断传值进去,还是传地址进去,两者会产生两种完全不同的效果。—用自己实现的优先队列实现Dijkstra算法时被坑后的心得。

  • 在处理长度不确定的字符串的时候尽量使用字符串,而不要着急使用动态数组。

  • realloc函数可以重新分配空间大小,而不改变当下空间存储的数据。适用于已经分配好内存空间,而传递内存开始位置给函数的情况。示例如下:

  • vector有一个reverse_iterator,可以实现vector的逆序遍历,示例如下:

  • 链表要删除多个数据的时候一定要注意:

    • 如果你删除了当前这个节点curNode,那么上一个节点preNodenext指针就指向了该节点next指针指向的元素,即preNode->next = curNode->next。如果只删除一个元素,那么此时你就完事了,如果你还要继续在这个链表中查找符合条件的元素,继续删除,那么你要注意了:你需要记录当前元素,如果你下一次处理的元素也要被删除,那么就需要让这次处理的元素的指针指向下一次处理的元素的next指针。所以你记录的preNode应该是之前哪个节点,不需要变化。说的我自己都晕了,还是上代码吧,比较清晰。

链表定义如下:

class ListNode {
public:
    int val;
    ListNode* next;
    ListNode(int val){
        this->val=val;
        this->next=NULL;
    };
};

删除多个元素的函数如下,删除链表中大于m的元素:

ListNode* partition(ListNode* head,int m) {
    ListNode* tmp = head;
    ListNode* newhead = NULL;
    ListNode* newList = NULL;
    ListNode* pre = head;
    while(tmp != NULL)
    {
        if(tmp->val > m)
        {
            if(tmp == head)
            {
                head = tmp->next;//这里还没有确定head是否通过过滤,但需要把它先记录下来
                pre = head;
            }
            else
            {
                pre->next = tmp->next;//这里没有挪动
            }
        }
        else//如果不需要删除元素,那么才需要将pre向前挪动,否则不需要挪动
        {
            pre = tmp;
        }
        tmp = tmp-> next;
    }
    return head;
}
  • 对于一些看似非常繁琐的问题,首先找出它的上下界,然后使用二分或者其它方法慢慢去逼近它。
  • 构造函数不可以显示调用,析构函数可以显示调用。
  • 静态变量既可以是基本数据类型,也可以是类或者结构体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr成文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值