您的位置:首页 > 娱乐 > 八卦 > 建筑设计公司有哪些部门_淘宝官网首页设计_seo是如何做优化的_凤凰军事新闻最新消息

建筑设计公司有哪些部门_淘宝官网首页设计_seo是如何做优化的_凤凰军事新闻最新消息

2025/7/8 0:30:48 来源:https://blog.csdn.net/Tadecanlan/article/details/146116760  浏览:    关键词:建筑设计公司有哪些部门_淘宝官网首页设计_seo是如何做优化的_凤凰军事新闻最新消息
建筑设计公司有哪些部门_淘宝官网首页设计_seo是如何做优化的_凤凰军事新闻最新消息

面试考察建议

  • 入门问题:验证基础语法和概念理解。
  • 进阶问题:考察类型系统、内存安全等核心知识。
  • 高阶问题:测试对底层实现和泛型编程的理解。

一、入门

1、本质

指针:一种内置的数据类型,直接指向内存地址;指针主要用于操作数组或动态分配的内存块;

迭代器:一种抽象概念,是为了统一对不同容器的访问方式而设计的,它是容器提供的一种接口。迭代器适用于所有标准库容器,如 std::vectorstd::list 等。

2、迭代器和指针的共同点是什么?

解引用操作:均可通过*访问指向的数据。

成员访问:都可以使用 -> 操作符来访问对象的成员

算术运算:支持自增(++)、自减(--)操作

    // 指针遍历数组for (int *p = arr; p != arr + 3; ++p) {std::cout << *p;}// 迭代器遍历vectorfor (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it;}

3、用迭代器实现指针的随机访问?

std::vector<int> vec = {1,2,3,4,5};
auto it = vec.begin() + 2;  // 直接跳转到索引2(值为3)

二、进阶

1、从类型系统、安全性、失效场景三方面对

  • 类型系统

    • 指针:类型严格匹配(如int*float*不可互赋)
    • 迭代器:通过模板实现泛型,适用于所有容器(如template<typename Iter>
  • 安全性

    • 指针:易出现野指针、内存泄漏、越界访问(如int* p = nullptr; *p = 1;
    • 迭代器:提供边界检查(如it != end()),但容器结构变化可能导致失效(如vector扩容)
  • 失效场景

    • 指针:对象销毁后自动失效(如delete ptr;后继续使用)
    • 迭代器:容器结构变化时失效(如vec.insert(it, 10);it失效)

三、高阶

1、为什么vector<bool>的迭代器行为特殊?

std::vector<bool> 为了节省内存,不会像普通的 std::vector 那样为每个 bool 元素分配一个字节(8 位)的内存空间,而是采用位压缩的方式。由于 bool 元素是以位的形式存储的,不能直接对单个位进行常规的指针操作,因此普通的指针无法直接作为 std::vector<bool> 的迭代器。

int main() {std::vector<bool> vec = {true, false, true};// bool* p = &vec[0];  // 编译错误或返回无效地址。返回的是代理对象的临时地址,而非实际存储位的内存地址auto it = vec.begin();// 这里 *it 返回的是 std::vector<bool>::reference 类型的代理对象std::cout << std::boolalpha << *it << std::endl;return 0;
}

2、必须用指针/迭代器的场景?

  • 必须用指针的场景

    • 与C库交互(如qsort
    • 多态对象动态绑定(如Base* ptr = new Derived()
  • 必须用迭代器的场景

    • STL算法操作(如std::sort
    • 复杂容器遍历(如std::map的键值对访问)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com