美文网首页
leet code 笔记

leet code 笔记

作者: 章鱼哥呀 | 来源:发表于2020-07-09 12:39 被阅读0次

结构体生成内存申请

malloc与new,C++中的指针与引用,C++struct与class的区别

  • new 不但分配对bai象空间, 还会在分配后调用对du象的构造器, 而 malloc 只是分配zhi, 不构
  • new 分配时要指定类型, 是类型安全的; 而 malloc 返回的是 void *, 类型不安全; 类型不安全的东西在 C++ 里是不被提倡的!
## malloc
ListNode* l = (struct ListNode *)malloc(sizeof(struct ListNode));
## new
ListNode* l = new ListNode(0);

std::vector<char> * 转std::string 的三种方法

cp from https://www.iteye.com/blog/hulefei29-1974759

1.  std::vector<char> *data = response->getResponseData();  
2.  std::string res;  
3.  //way1  
4.  for (int i = 0;i<data->size();++i) {  
5.  res+=(*data)[i];  
6.  }  
7.  res+='\0';  
8.  std:cout << res;  


1.  std::vector<char> *data = response->getResponseData();  
2.  std::string res;  
3.  res.insert(res.begin(), data->begin(), data->end());  
4.  std::cout << res;  


1.  std::vector<char> *data = response->getResponseData();  
2.  std::string res;  
3.  const char* s = &(*data->begin());  
4.  res = std::string(s, data->size());  
5.  std::cout << res;

c++ vector 删除元素

在vector中有三种涉及删除的方法,第一种是vector::clear(),第二种是vector::erase(),第三种是vector::pop_back()。clear用来清空整个vector,同时将size变成0,无返回值;erase通过传入迭代器进行删除,既可以删除单个元素,也可以删除某一范围的元素,删除之后它将返回下一个位置的迭代器;pop_back用来删除末尾元素,同时将size减1,无返回值。

一般来讲erase用得比较多,不注意也容易踩坑,例如:

vector<int> vec{1, 4, 3, 2, 5, 2};
    
for(auto it = vec.begin(); it != vec.end(); it++){
    if(*it < 3){
        cout << "num is " << *it << endl;
        it = vec.erase(it);
        if(it == vec.end()) break;
    }
}

这个代码如果不在for循环里加上最后的判断会导致错误,原因在于,当it指向最后一个2时,满足删除条件,删除后it变成了end,然后又做了++操作,导致越界。

类似的坑还有许多,这里就不一一列举了,总之,它们的共同点在于对vector进行删除时都不够优雅,需要进行一些额外的处理避免误操作。
原文链接:https://blog.csdn.net/lishichengyan/java/article/details/82669153

正确代码:

vector<int> vec{1, 4, 3, 2, 5, 2};
    
for(auto it = vec.begin(); it != vec.end();){
    if(*it < 3){
        cout << "num is " << *it << endl;
        it = vec.erase(it);
        
    }
    else {
      iter++;
    }
}

vector 排序

filter set 的使用

        set<string> filter_set;  // for filtering 
        for (auto & item : m_policy_ctx->input_items){
            if (filter_set.insert(item->feedid).second)
            {
                input_items_after_ranking.push_back(item);
            } 
        }

相关文章

网友评论

      本文标题:leet code 笔记

      本文链接:https://www.haomeiwen.com/subject/gibjcktx.html