std::vector容器

本文深入探讨了C++标准库中的std::vector容器,详细介绍了其动态数组特性,包括自动管理和按需扩张的能力。通过代码示例展示了std::vector的基本操作,如插入、删除、更新和查找元素的方法。

 std::vector是封装动态数组的顺序容器,支持下标随机访问,c++开发中使用非常频繁。
其存储是自动管理的,按需扩张和收缩,一般扩展为原先的1.5-2倍。 
vector通常占用多于静态数组的空间,因为需要分配更多内存以管理将来可能的增长。

代码:

下面演示std::vector的增、删、改、查

#include <iostream>
#include <vector>

using namespace std;

typedef vector<int> MyVector;

void printf_myVector(const MyVector& vec) {
	auto vecIter = vec.begin();
	for (; vecIter != vec.end(); vecIter++) {
		cout << *vecIter << " ";
	}
	cout << "\n";
}

int main()
{
	MyVector myVector;

	//增
	int array[] = { 1,5,12 };
	for (auto &num : array) {
		myVector.push_back(num);
	}
	myVector.insert(myVector.end(), {7,8});
	printf_myVector(myVector);

	cout << "----------------我是分割线 删除5-------------" << endl;
	//删
	auto iter = myVector.begin();
	for (; iter != myVector.end(); iter++) {
		if (5 == *iter) {
			iter = myVector.erase(iter);
		}
	}
	printf_myVector(myVector);

	cout << "----------------我是分割线 修改索引0、1-------------" << endl;
	//改
	if (myVector.size() > 2) {
		myVector[0] = 55;
		myVector.at(1) = 66;
	}
	printf_myVector(myVector);

	cout << "----------------我是分割线 查找55-------------" << endl;
	//查
	bool flag = false;
	vector<int>::iterator iter1;
	iter1 = find(myVector.begin(), myVector.end(), 55);
	if (iter1 != myVector.end()) {
		flag = true;
	}
	cout << "flag = " << flag << endl;

	getchar();
	return 0;
}

输出:

### std::vector 的 insert 方法使用教程与示例 `std::vector` 的 `insert` 方法用于在向量的指定位置插入一个或多个元素。该方法有多种重载形式,支持插入单个元素、多个相同元素、范围内的元素等。以下是详细的用法说明和示例代码。 #### 插入单个元素 可以通过指定位置和单个值来插入一个元素。以下是一个示例: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; std::vector<int>::iterator it = vec.begin() + 2; // 指向第三个元素的位置 vec.insert(it, 10); // 在第三个位置插入值为10的元素 for (const auto& elem : vec) { std::cout << elem << " "; } // 输出: 1 2 10 3 4 5 return 0; } ``` 上述代码中,`vec.insert(it, 10)` 将值 `10` 插入到迭代器 `it` 所指向的位置之前[^3]。 #### 插入多个相同元素 可以插入多个相同的元素到指定位置。例如: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; std::vector<int>::iterator it = vec.begin() + 2; // 指向第三个元素的位置 vec.insert(it, 3, 20); // 在第三个位置插入3个值为20的元素 for (const auto& elem : vec) { std::cout << elem << " "; } // 输出: 1 2 20 20 20 3 4 5 return 0; } ``` 这里,`vec.insert(it, 3, 20)` 表示在迭代器 `it` 所指位置之前插入三个值为 `20` 的元素。 #### 插入范围内的元素 可以将另一个容器中的元素范围插入到指定位置。例如: ```cpp #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; std::vector<int> otherVec = {10, 20, 30}; std::vector<int>::iterator it = vec.begin() + 2; // 指向第三个元素的位置 vec.insert(it, otherVec.begin(), otherVec.end()); // 插入otherVec的所有元素 for (const auto& elem : vec) { std::cout << elem << " "; } // 输出: 1 2 10 20 30 3 4 5 return 0; } ``` 这段代码展示了如何从另一个容器 `otherVec` 中插入所有元素到目标容器 `vec` 的指定位置[^3]。 #### 使用 emplace 和 emplace_back 的对比 虽然 `emplace` 和 `emplace_back` 是不同的方法,但它们都提供了直接构造对象的能力,避免了不必要的拷贝或移动操作。例如: ```cpp #include <iostream> #include <vector> int main() { std::vector<std::pair<int, int>> vec; vec.emplace(vec.begin(), 1, 2); // 使用emplace在开头插入元素 vec.emplace_back(3, 4); // 使用emplace_back在末尾插入元素 for (const auto& elem : vec) { std::cout << "{" << elem.first << ", " << elem.second << "} "; } // 输出: {1, 2} {3, 4} return 0; } ``` `emplace` 和 `emplace_back` 的区别在于前者可以在任意位置插入,而后者仅限于容器末尾[^1]。 ### 注意事项 - 使用 `insert` 方法时,若插入大量元素可能导致底层内存重新分配,因此性能可能受到影响。 - 对于频繁插入操作,建议预先调用 `reserve` 方法以减少内存重新分配的次数[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值