1.11 C++ STL

一、STL 容器

  • 序列容器:vector、list、forward_list、deque、array、string
  • 关联式容器(自动排序、基于红黑树):set、map、multiset、multimap
  • 无序关联式容器(基于哈希表):unordered_set、unordered_map、unordered_multiset、unordered_multimap
  • 适配器容器(是对其他容器的封装):stack、queue、priority_queue

二、STL 算法

std::vector<int> v {1, 2, 3, 4};
auto it = std::find(v.begin(), v.end(), 3);  // 返回迭代器
if (it != v.end()) std::cout << "Found at: " << it - v.begin();
std::sort(v.begin(), v.end());  // 默认升序
std::sort(v.begin(), v.end(), std::greater<int>());  // 降序

// 1、优先使用 lambda
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

// 2、使用 仿函数
struct Compare {
    bool operator()(int a, int b) const {
        return a < b;  // 升序排序
    }
};
std::sort(v.begin(), v.end(), Compare());

// 3、自定义比较函数
bool compare(int a, int b) {
    return a > b;  // 降序排序
}
std::sort(v.begin(), v.end(), compare);

三、所有容器共有的核心方法

方法

作用

示例(以vector<int>为例)

empty()

判断容器是否为空

if (v.empty()) {...}

size()

返回元素数量

int n = v.size();

clear()

清空容器

v.clear();

swap(c)

交换两个容器的内容

v1.swap(v2);

begin()/end()

返回迭代器(含const版本)

auto it = v.begin();

四、vector

vector<int> a;
vector<int> a(n);
vector<int> a(n,1);
vector<int> a({1,2,3})
v.front() / v.back();
v.push_back(data) / v.emplace_back(data) / v.pop_back();
v.insert(iterator, data) / v.erase(iterator) / v.erase(first, last); 
// 下标 -> 迭代器:v.begin() + index; 
// 迭代器 -> 下标:it - v.begin();

五、string

//1.
string str1; //生成空字符串
//2.
string str2("123456789"); //生成"1234456789"的复制品 
//3.
string str3("12345", 0, 3);//结果为"123" ,从0位置开始,长度为3
//4.
string str4("123456", 5); //结果为"12345" ,长度为5
//5.
string str5(5, '2'); //结果为"22222" ,构造5个字符'2'连接而成的字符串
//6.
string str6(str

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++/嵌入式开发 秋招面经 文章被收录于专栏

一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。

全部评论
十四、vector 与 list 差异? vector 是动态数组,是一个连续的内存快,随机访问是 O(1) 复杂度,迭代器支持随机访问。 list 是双向链表,是离散的内存,随机访问是 O(1) 复杂度,迭代器仅支持 ++/-- 这里list 随机访问 = O(n)
2 回复 分享
发布于 03-27 19:20 山西
求源码示例
点赞 回复 分享
发布于 04-01 22:42 河北
欢迎订阅专栏《C++/嵌入式开发 秋招面经》 :https://www.nowcoder.com/creation/manager/columnDetail/MKaoll
点赞 回复 分享
发布于 03-30 17:06 河北

相关推荐

1.&nbsp;请详细介绍你的校园版即时聊天室项目,说明项目中遇到的分布式并发、资源竞争问题及解决思路,并说明项目可支撑的在线人数、QPS等性能指标。2.&nbsp;项目中用到了&nbsp;Reactor&nbsp;模型、线程池、Redis&nbsp;发布订阅、MySQL&nbsp;离线消息、一致性哈希负载均衡,请分别说明这些技术的实际落地方式与开发中遇到的坑点。3.&nbsp;聊天室项目中,如何处理Redis&nbsp;宕机导致的消息丢失问题?如何保证消息顺序一致性?4.&nbsp;你在实习中负责安卓前端数据处理与底层&nbsp;SDK&nbsp;对接,工作中做过哪些性能优化?遇到过哪些性能瓶颈?5.&nbsp;请说明&nbsp;C++&nbsp;中指针与引用的区别,以及各自优先使用的场景。6.&nbsp;请介绍&nbsp;C++&nbsp;智能指针的种类、适用场景,并说明智能指针存在的开销与循环引用问题如何解决。7.&nbsp;请说明野指针与悬空指针的区别,以及如何避免这两类问题。8.&nbsp;你掌握哪些多线程调试方法?如何排查线程阻塞、死锁问题?9.&nbsp;实际开发中遇到过哪些内存问题(内存泄漏、OOM、栈溢出等)?了解哪些内存检测工具,如何进行内存问题排查?10.&nbsp;多线程环境下使用&nbsp;STL&nbsp;容器需要注意什么?用过哪些线程同步方式,有无无锁编程思路?11.&nbsp;请详细说明&nbsp;TCP&nbsp;与&nbsp;UDP&nbsp;的区别,你的即时聊天室为什么选择&nbsp;TCP&nbsp;而非&nbsp;UDP?12.&nbsp;什么是&nbsp;TCP&nbsp;粘包问题?常见解决方法有哪些?你项目中是如何处理的?13.&nbsp;TCP&nbsp;传输过程中出现网络抖动、丢包、延迟时,如何处理?拥塞控制大致机制是什么?14.&nbsp;TCP&nbsp;是如何保证可靠传输的?超时重传、确认应答、滑动窗口分别起什么作用?15.&nbsp;项目中如何实现多服务器跨节点通信?Nginx&nbsp;负载均衡与一致性哈希分别如何使用?16.&nbsp;请说明&nbsp;vector&nbsp;/&nbsp;list&nbsp;/&nbsp;map&nbsp;/&nbsp;unordered_map&nbsp;的底层实现、优缺点及适用场景。17.&nbsp;你在项目中如何使用&nbsp;STL&nbsp;容器?请举例具体业务场景与选择依据。18.&nbsp;如果要在内存中高频维护用户列表、群组列表,你会选择什么容器?为什么?19.&nbsp;多线程环境下使用&nbsp;vector、unordered_map&nbsp;等容器需要注意什么?如何保证线程安全?20.&nbsp;安卓&nbsp;SDK&nbsp;基于&nbsp;C++&nbsp;开发,与&nbsp;Java&nbsp;层之间如何通信?是否了解&nbsp;JNI?21.&nbsp;你常用&nbsp;C++&nbsp;语法标准是哪些?项目中用到哪些&nbsp;C++11/14&nbsp;特性?22.&nbsp;简述主线程耗时操作优化思路,为什么不能在主线程做&nbsp;heavy&nbsp;计算或&nbsp;IO?
查看22道真题和解析
点赞 评论 收藏
分享
评论
6
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务