我的编程笔记
  • 云胡的编程笔记
  • 后端
    • Spring Boot 配置 MySQL 数据库
    • MyBatis-Plus 实现增删改查操作
    • Java 后端将上传的 csv 文件转为 Excel xlsx 文件
  • JavaScript
    • JavaScript 三种循环方法
    • JavaScript 箭头函数
    • JavaScript 高阶函数
    • JavaScript 变量作用域
    • JavaScript 操作 DOM
  • Vue3
    • Vue3 搭配 Element-Plus
    • Vue3 实现路由跳转
    • Vue3 上传 Excel 文件
  • Cpp
    • C++ Vector 易错点
  • Qt
    • Qt 实时显示鼠标位置
  • Python
  • 编辑器
    • Visual Studio Code 使用
  • 其他
    • 网站和软件推荐
  • 数据结构与算法
由 GitBook 提供支持
在本页
  • 一、概述
  • 二、分析
  • 三、解决方法
  • 三、总结
在GitHub上编辑
  1. Cpp

C++ Vector 易错点

一、概述

vector 的 resize() 函数会分配一个大小,这时候使用 push_back() 函数会在尾部进行添加。

二、分析

2.1 代码

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> a;
	a.clear();
	a.resize(5);
	for(int i = 0; i < 5; i++)
	{
		a.push_back(i+1);
	}
	for(int i = 0; i < a.size(); i++)
	{
		cout << a[i] << " ";
	}
	
   return 0;
}

2.2 输出结果

0 0 0 0 0 1 2 3 4 5

这不是我们想要的,使用以下方法解决。

三、解决方法

3.1 方法 1

使用 push_back() 进行添加值,那么 clear() 之后就不要再分配大小了。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> a;
	a.clear();
	// 不要进行 resize
	for(int i = 0; i < 5; i++)
	{
		a.push_back(i+1);
	}
	for(int i = 0; i < a.size(); i++)
	{
		cout << a[i] << " ";
	}
	
   return 0;
}

3.2 方法 1 输出结果

1 2 3 4 5

3.3 方法 2

不要使用 push_back() 进行添加值,直接通过赋值的方法。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> a;
	a.clear();
	a.resize(5);
	for(int i = 0; i < 5; i++)
	{
		a[i] = i + 1;
	}
	for(int i = 0; i < a.size(); i++)
	{
		cout << a[i] << " ";
	}
   return 0;
}

3.4 方法 2 输出结果

1 2 3 4 5

三、总结

很小的细节,但是不注意就容易出错,要细心。

上一页Cpp下一页Qt

最后更新于3年前