第六节 C++ - 动态数组 std::vector

本文介绍了C++中的动态数组std::vector,通过示例展示了如何初始化、添加元素以及查看其大小。在代码中,我们创建了一个动态数组DynaArray,初始大小为3,随后添加了更多元素,使其大小变为5,并输出了所有元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <vector>    //include header file of std::vector

#define ARRAY_SIZE 3
int main()
{
	std::vector<int> DynaArray(ARRAY_SIZE);  //定义一个动态数据,主要后面是括号(),静态数组是[]

	DynaArray[0] = 10;   //为动态数据写入元素
	DynaArray[1] = 20;
	DynaArray[2] = 30;
	
	std::cout << "DynaArray size = " << DynaArray.size() << std::endl; 
	for (int i = 0; i < DynaArray.size(); ++i)
		std::cout << "staticArray[" << i << "] = " <<  DynaArray[i] << std::endl;
	
	std::cout << "add elements" << std::endl;  
	DynaArray.push_back(40);  //用push_back函数在动态数组内添加元素,可改变数组的大小
	DynaArray.push_back(50);
	
	std::cout << "DynaArray size = " << DynaArray.size() << std::endl;
	for (int i = 0
<think>好的,我现在需要回答用户关于C++std::vector<std::string>的用法和含义的问题。首先,我得确认用户的需求,他们可能刚接触C++,或者对STL容器不太熟悉,想了解这个特定容器的基本使用方法和应用场景。 首先,我应该解释std::vector<std::string>是什么。std::vectorC++标准模板库中的一个动态数组模板类,而std::string则是处理字符串的类。所以结合起来,这个类型就是一个可以动态调整大小的数组,每个元素都是字符串。需要强调它的优势,比如自动内存管理、动态扩展、随机访问等。 接下来,用户需要具体的用法。我应该分步骤说明,比如如何声明和初始化、添加元素、访问元素、遍历、删除元素以及常用方法。每个部分都要给出示例代码,这样用户更容易理解。比如初始化可以用默认构造、列表初始化或者从其他容器复制。添加元素可以用push_back或emplace_back,访问可以用[]运算符或at(),遍历可以用迭代器或范围循环。 然后,要考虑用户可能遇到的常见问题,比如性能问题(比如预分配空间)、异常安全(比如使用emplace_back减少拷贝)、线程安全等。这些注意事项能帮助用户避免常见陷阱。 另外,用户提供的引用中有涉及vector和map的结合使用,但用户的问题集中在vector<string>上。不过可能需要稍微提到与其他容器的嵌套使用,但重点还是保持在本主题上。引用中的例子可以作为实际应用的参考,比如在配置加载中使用vector<string>存储字符串列表,如引用3中的例子。 需要确保LaTeX格式正确,比如变量名用$...$包裹,独立公式用$$...$$,但这个问题中可能涉及代码较多,数学公式较少。不过如果有提到复杂度之类的,可以用LaTeX,比如O(1)的访问时间。 最后,生成相关问题,帮助用户深入理解。可能的问题包括与其他容器的比较、底层实现、性能优化、实际应用案例等。 现在组织结构:先含义,再用法分点,注意事项,示例代码,相关问题。确保代码格式正确,用中文回答,引用相关文献。用户提供的引用1、2、3中的例子可以作为实际应用场景的例子,比如引用3中的vtTemp用来存储字符串,通过迭代器遍历输出。 注意检查是否有遗漏的关键点,比如vector的内存管理、迭代器失效的情况,但可能用户作为初学者不需要太深入,保持回答简洁实用即可。</think>### C++中`std::vector<std::string>`的用法及含义 #### 含义解析 `std::vector<std::string>`是C++标准模板库(STL)中的一种容器组合: 1. **`std::vector`**:动态数组,支持快速随机访问和动态扩容[^1]。 2. **`std::string`**:封装字符串操作的类,支持动态字符序列管理。 组合后,它表示一个存储字符串的动态数组,适用于需要灵活管理字符串集合的场景(如配置文件解析、文本处理)[^3]。 --- #### 核心用法分步说明 ##### 1. **声明与初始化** ```cpp #include <vector> #include <string> // 空向量 std::vector<std::string> vec1; // 初始化列表 std::vector<std::string> vec2 = {"apple", "banana", "cherry"}; // 指定初始大小和默认值 std::vector<std::string> vec3(5, "default"); // 5个"default"字符串 ``` ##### 2. **添加元素** ```cpp vec1.push_back("hello"); // 追加元素(可能触发拷贝) vec1.emplace_back("world"); // 原地构造(高效,减少拷贝)[^2] ``` ##### 3. **访问元素** ```cpp // 通过下标访问(不检查越界) std::string first = vec2[0]; // "apple" // 通过at()访问(越界抛出异常) std::string second = vec2.at(1); // "banana" // 获取首尾元素 std::string front = vec2.front(); std::string back = vec2.back(); ``` ##### 4. **遍历元素** ```cpp // 迭代器遍历 for (auto it = vec2.begin(); it != vec2.end(); ++it) { std::cout << *it << std::endl; } // 范围for循环(C++11+) for (const auto& s : vec2) { std::cout << s << std::endl; } ``` ##### 5. **删除元素** ```cpp vec2.pop_back(); // 删除最后一个元素 vec2.erase(vec2.begin() + 1); // 删除第二个元素("banana") vec2.clear(); // 清空所有元素 ``` ##### 6. **常用方法** ```cpp bool isEmpty = vec2.empty(); // 判断是否为空 size_t size = vec2.size(); // 当前元素数量 vec2.resize(10); // 调整容量为10 vec2.shrink_to_fit(); // 释放多余内存 ``` --- #### 注意事项 1. **性能优化**:预分配空间减少扩容开销 ```cpp vec1.reserve(100); // 预分配100个元素的内存 ``` 2. **迭代器失效**:插入/删除操作可能导致迭代器失效,需重新获取。 3. **线程安全**:多线程环境下需自行加锁保护。 --- #### 应用示例(参考引用[3]) ```cpp std::vector<std::string> vtTemp; GetConfigState(vtTemp); // 假设从配置加载数据 for (const auto& str : vtTemp) { std::cout << str << std::endl; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值