哈希表的数据结构 --数组+链表
怎么理解容器和迭代器的关系,
容器是怎么实现接口的统一 ? --用到模板
用到了模板的什么性质?
--
didi
工作中有成就感的事情?
写了一个这样的脚本,工作中会使用shell语句较多,因为部门成立时间较短,有很多命令会重复执行,我在工作之余总结了下这些shell语句,可以一键执行好几个代码仓(如果成功就继续向下执行 ),不用人为的去移动各个代码仓生成的组件rpm包,并将含有修改的代码换到设备说,写了2天供大家使用,提高大家的工作效率
rpc通信框架?并说一下好处 相比于http https://www.zhihu.com/question/25536695
有用过程rpc框架吗
作者:洪春涛 链接:https://www.zhihu.com/question/25536695/answer/221638079 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
syn攻击的解决思路?
消息队列读写数据一致性的问题?
消息队列还有什么好处? -- 反压上层
不难的算法题:
最长不重复子串
utcode和utF8的区别, python 在这个上面还是有些不太友好的地方
更倾向于使用多线程还是多进程
想接触应用层的事,现在主要是IP层的事
如何自验证
百度地图
自定义的字符串类,只用写定义,不用写实现
构造、析构、拷贝构造、赋值、操作符等
class String { private: char* _ptr; size_t _size; size_t _capacity; static size_t npos; public: String()//无参构造,开辟一个字节空间 :_ptr(new char[1]) , _size(0) , _capacity(0) { *_ptr = '\0'; } String(const char* ptr)//带参构造 :_ptr(new char[strlen(ptr)+1]) ,_size(0) ,_capacity(0) { strcpy(_ptr, ptr); //重新开辟空间 进行字符串拷贝 _size =_capacity= strlen(_ptr); } //此处复用带参构造开辟一个临时对象,进行交换 String(const String& str)//拷贝构造 :_ptr(nullptr) ,_size(0) ,_capacity(0) { String tmp(str._ptr); Swap(tmp); } //此处复用拷贝构造创建临时对象str,进行交换 String& operator=(String str)//赋值运算符 { Swap(str); return *this; } const char& operator[](size_t n) const { assert(n < _size); return _ptr[n]; } //增容,注意循环进行拷贝,释放原有空间 void reserve(size_t n) { if (n > _capacity) { char* str = new char[n+1];//开新的空间 //拷贝内容,这里有bug,拷贝不到 /0 //strcpy(str, _ptr); for (size_t i=0;i<_size;i++) { str[i] = _ptr[i]; } delete[] _ptr; _ptr = str; _capacity = n; } } //大于原有空间需要增容,空间够用需要用ch填充(memset函数) void resize(size_t n,char ch='\0') { if (n > _capacity) { reserve(n); } if (n > _size) { memset(_ptr + _size, ch, n - _size); } _size = n; _ptr[_size] = '\0'; } //判断是否增容 void push_back(const char& ch) { if (_size == _capacity) { size_t new_capacity=_capacity == 0 ? 15 : 2 * _capacity; reserve(new_capacity); } _ptr[_size] = ch; _size++; _ptr[_size] = '\0'; } //析构 ~String() { if (_ptr) { delete[] _ptr; _ptr = nullptr; _size = _capacity = 0; } } size_t size() const { return _size; } size_t capacity() const { return _capacity; } void Swap(String& str) { swap(_ptr, str._ptr); swap(_size, str._size); swap(_capacity, str._capacity); } void append(const char* str) { int len = strlen(str); if (len + _size > _capacity) { reserve(_size+len ); } //尾插字符串 //strcpy(_ptr+_size,str); _ptr[len + _size] = '\0'; while (len) { _ptr[len + _size-1] = str[len-1]; len--; } _size += strlen(str); } String& operator+=(const char& ch) { this->push_back(ch); return *this; } String& operator+=(const char* str) { this->append(str); return *this; } String& operator+=(const String& str) { append(str._ptr); return *this; } //插入一个字符 void insert(size_t pos, const char& ch) { assert(pos <= _size); if (_size == _capacity) { size_t newc = _capacity == 0 ? 15 : 2 * _capacity; reserve(newc); } size_t end = _size; while (end-pos) { _ptr[ end ] = _ptr[end - 1]; --end; } _ptr[pos] = ch; _ptr[++_size] = '\0'; } //插入一个字符串 void insert(size_t pos, const char* str) { assert(pos <= _size); int len = strlen(str); if (_size + len > _capacity) { reserve(_size + len); } size_t end = _size + len; while (end>pos+len-1) { _ptr[end] = _ptr[end - len]; --end; } memcpy(_ptr + pos, str, len); _size += len; _ptr[_size] = '\0'; } //删除指定位置指定长度 void erase(size_t pos,size_t len) { assert(pos < _size&&pos>=0); if (pos + len >= _size) { _ptr[pos] = '\0'; _size = pos; return; } size_t start = pos + len; while (start<_size) { _ptr[pos++] = _ptr[start++]; } _size -= len; _ptr[_size] = '\0'; } size_t find(const char& ch, size_t pos=0) { assert(pos < _size); while (pos < _size) { if (_ptr[pos] == ch) { return pos; } pos++; } return npos; } size_t find(const char* str, size_t pos=0) { assert(pos < _size); char* s=strstr(_ptr+pos, str); if (s) { return s - _ptr; } return npos; } typedef char* iterator; typedef const char* const_iterator; iterator begin()//第一个元素的位置 { return _ptr; } iterator end() { return _ptr + _size; } const_iterator begin() const//第一个元素的位置 { return _ptr; } const_iterator end() const //最后一个元素的下一个位置 { return _ptr + _size; } friend ostream& operator<<(ostream& out, const String& str); friend istream& operator>>(istream& in, String& str); };
C++构造函数之委托构造函数
C++ sizeof各种类型的大小
写一个字符串转整数的接口,这个接口是给很多人用的,需要比较健壮,可扩展,负数,大数也得考虑
向一个vector里push 100次,其sizeof()多大
入参用const& str 修饰有什么区别
epoll的水平和边沿触发的区别
shell命令,统计哪个词出现的次数最多
syn攻击造成了什么?
设备崩溃怎么办,怎么查崩溃的原因
会不会用gdb调试call文件,直接跳到某行,看变量的值
读写锁,读锁和写锁 谁会先抢到锁
全部评论
(0) 回帖