【c/c++】 学习vector 容器笔记

c/c++ 学习vector 容器笔记

  • int 型的 vector 容器应该使用什么类型的索引?

对于 int 型的 vector 容器,应该使用 size_t 类型的索引。size_t 是一个无符号整数类型,它在标准库中广泛用于表示大小和索引。它足够大,可以表示任何标准容器的最大可能大小。

例如,访问 vector 中的元素时,你可以这样做:

复制代码
std::vector<int> vec = {1, 2, 3, 4, 5};
size_t index = 2; // 使用 size_t 作为索引
if (index < vec.size()) {
    std::cout << "Element at index " << index << " is " << vec[index] << std::endl;
}

在这个例子中,index 是 size_t 类型的变量,它被用来访问 vec 中的元素。使用 size_t 作为索引类型可以避免潜在的类型不匹配问题,并且与标准库容器的 size() 方法返回的类型保持一致。

  • 读取存放 string 对象的 list 容器时,应该使用什么类型?

读取存放 string 对象的 list 容器时,你应该使用 std::liststd::string::const_iterator 类型的迭代器。如果你需要修改容器中的元素,可以使用 std::liststd::string::iterator。以下是使用迭代器遍历 list 容器并读取 string 对象的示例代码:

复制代码
#include <iostream>
#include <list>
#include <string>

int main() {
    std::list<std::string> lst = {"Hello", "World", "from", "list"};

    // 使用 const_iterator 遍历 list 容器
    for (std::list<std::string>::const_iterator it = lst.cbegin(); it != lst.cend(); ++it) {
        std::cout << *it << std::endl; // 输出当前迭代器指向的 string 对象
    }

    return 0;
}

在这个例子中,我们使用 cbegin() 和 cend() 成员函数来获取指向 list 容器的常量迭代器,这样我们就可以在不修改元素的情况下读取它们。如果需要修改元素,可以使用 begin() 和 end() 成员函数来获取可修改的迭代器。

注意,使用迭代器时,你通常不需要显式地声明迭代器的类型,因为 C++11 引入了自动类型推导(auto 关键字)。例如:

复制代码
for (auto it = lst.cbegin(); it != lst.cend(); ++it) {
    std::cout << *it << std::endl;
}

这使得代码更加简洁和易于阅读。

相关推荐
FlightYe6 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎7 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
by209997 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
视觉小萌新7 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
Rover Ramble8 小时前
C++ 用互斥锁实现读写锁
开发语言·c++
你怎么知道我是队长8 小时前
C++零基础入门第2周:数据类型、运算符与表达式完全指南(附20段可运行代码+避坑清单)
c++
say_fall8 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
雪落漂泊9 小时前
C++算法 滑动窗口篇(下)
开发语言·c++
爱聊灵光的维C9 小时前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
AI+程序员在路上9 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能