c++ vector的几个常见操作的用法测试

本文通过几个示例展示了C++中vector的不同用法,包括如何传递vector作为参数、批量复制vector的内容以及遍历并从vector中删除特定元素的方法。

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


// 测试两种vector参数的区别
test_vector_func(std::vector<std::string> v1, std::vector<std::string>& v2)
{
	CCLOG("[1] 0x%x 0x%x", &v1, &v2);

	v1.clear();
	v2.clear();
}

std::vector<std::string> v1 = {"1", "2", "3"};
std::vector<std::string> v2 = { "1", "2", "3" };
CCLOG("[0] 0x%x 0x%x", &v1, &v2);
test_vector_func(v1, v2);


// 测试两个vector之间的批量复制
// 把v2全部复制到v1当中
std::vector<std::string> v1;
std::vector<std::string> v2 = { "1", "2", "3" };
v1.insert(v1.begin(),  v2.begin(),  v2.end());



// 遍历删除vector
// 如果v1中包含v2中的点,则将v1中的该点删除
void removePos(std::vector<Data>& v1, Vector<Data>& v2)
{
	for (auto it = v1.begin(); it != v1.end(); )
	{
		Point pos = (*it)->pos;

		bool isFind = false;
		for (auto it2 = v2.begin(); it2 != v2.end(); ++it2)
		{
			Point pos2 = *it2->pos;
			if (pos == pos2)
			{
				isFind = true;
				break;
			}
		}
		if (isFind)
		{
			it = v1.erase(it);
		}
		else
			++it;
	}
}



### C++ 中 `std::vector` 的常见用法 #### 1. 定义与初始化 `std::vector` 是 C++ STL 提供的一种动态数组容器,支持自动调整大小。可以通过多种方式定义和初始化向量。 ```cpp #include <iostream> #include <vector> using namespace std; int main() { // 创建一个空的整数型 vector vector<int> vec1; // 初始化一个含有三个元素的 vector,默认值为 0 vector<int> vec2(3, 0); // 使用另一个 vector 初始化新的 vector vector<int> vec3(vec2); return 0; } ``` 上述代码展示了如何创建不同类型的 `std::vector`[^1]。 --- #### 2. 插入与删除操作 `std::vector` 支持在尾部快速插入或移除元素,但在中间位置插入或删除会引发大量数据移动,效率较低。 ```cpp #include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers; // 向尾部添加元素 numbers.push_back(1); numbers.push_back(2); // 删除最后一个元素 if (!numbers.empty()) { numbers.pop_back(); } // 输出当前内容 cout << "[ "; for (auto x : numbers) { cout << x << ' '; } cout << "]\n"; return 0; } ``` 此代码片段演示了如何使用 `push_back()` 和 `pop_back()` 方法管理 `std::vector` 的内容。 --- #### 3. 遍历方法 遍历 `std::vector` 可以采用多种形式,包括范围基于循环、下标访问以及反向迭代器。 ```cpp #include <iostream> #include <vector> using namespace std; int main(){ vector<int> v = {1, 3, 2}; // 范围基循环 cout << "Range-based loop: "; for(auto x : v){ cout << x << ' '; } cout << "\n"; // 下标访问 cout << "Index access: "; for(int i=0;i<v.size();i++){ cout << v[i] << ' '; } cout << "\n"; // 反向迭代器 cout << "Reverse iterator: "; for(vector<int>::reverse_iterator rit=v.rbegin();rit!=v.rend();rit++){ cout << *rit << ' '; } cout << "\n"; return 0; } ``` 这段程序说明了正向和反向遍历的方法[^2]。 --- #### 4. 查找特定元素 利用 `<algorithm>` 库中的函数可以方便地实现查找功能。 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ vector<int> v = {1, 3, 2}; auto pos = find(v.begin(), v.end(), 3); if(pos != v.end()){ cout << "Element found at index: " << distance(v.begin(), pos) << endl; }else{ cout << "Element not found!" << endl; } return 0; } ``` 该示例解释了如何结合标准库算法执行高效的查找操作[^3]。 --- #### 5. 排序与自定义排序逻辑 对于需要对 `std::vector` 进行排序的情况,可以直接调用 `std::sort` 或者编写自己的排序逻辑。 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; bool customCompare(const int& a, const int& b){ return abs(a) < abs(b); } int main(){ vector<int> v = {-3, -1, 2, 4}; sort(v.begin(), v.end()); // 默认升序排列 sort(v.begin(), v.end(), greater<int>() ); // 降序排列 sort(v.begin(), v.end(), customCompare); // 自定义排序规则 for(auto x:v){ cout<<x<<" "; } cout<<"\n"; return 0; } ``` 以上代码提供了几种常见的排序策略及其应用实例[^4]。 --- #### 总结 通过对 `std::vector` 不同方面的介绍可以看出其灵活性强,在实际开发过程中可以根据需求灵活选用各种特性来满足具体场景下的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值