C++ 数组 技术教程文章

C++:34---动态数组(new)【图】

一、动态数组的定义 数组的维度可以为常量、也可以为一个函数的返回值int size() {return 3; } const int length = 3;int *p1 = new int[size()]{1,2,3}; int *p2 = new int[length]; int *p3 = new int[3]; 使用typedef为数组类型取别名typedef int arrT[42]; int *p=new arrT; //分配一个大小为42的int型数组 二、动态数组的初始化 默认情况下,new分配的对象都有默认初始化int *p1=new int[10]; //10个未初始化的int int *p2...

图解c/c++多级指针与多维数组【代码】【图】

声明:本文转自 chenyang_yao ,欢迎阅读原文。 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的。其中,多级指针与“多维”数组更是让很多人云里雾里,其实,只要掌握一定的方法,理解多级指针和“多维”数组完全可以像理解一级指针和一维数组那样简单。 首先,先声明一些常识,如果你对这些常识还不理解,请先去弥补一下基础知识:1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。...

C++ 怎样让函数返回数组【代码】

这个问题属于非常初级的问题,但是对于初学不知道的人可能会比较头疼。C++ 中函数是不能直接返回一个数组的,但是数组其实就是指针,所以可以让函数返回指针来实现。比如一个矩阵相乘的函数,很容易地我们就写成 实例 1 #include <iostream>2 3 using namespace std;4 5 float* MultMatrix(float A[4], float B[4])6 {7 float M[4];8 M[0] = A[0]*B[0] + A[1]*B[2];9 M[1] = A[0]*B[1] + A[1]*B[3]; 10 M[2] = A[2...

剑指 Offer 48. 最长不含重复字符的子字符串(C++) 数组(桶)Or 无辅助数组【代码】

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是...

C++二维数组名的再探索【代码】

#include <iostream>int main() {int d2a[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };//输出 0,1,2,3,4,5,6,7,8,9,10,11for (size_t i = 0; i < 3; i++){for (size_t j = 0; j < 4; j++){std::cout << d2a[i][j] << ",";}}//输出 0077FD04,0077FD04,0077FD14,0077FD24//可见二维数组名是数据首地址,d2a[0],d2a[1],d2a[2]分别是第一行,第二行,第三行的首地址std::cout << d2a << "," << d2a[0] << "," << d2a[1] << "," ...

C++类型数组的构造与析构【代码】

#include <iostream> using namespace std;class Point { public:Point() : x(0), y(0) {cout<<"Default Constructor called"<<endl;}Point(int x, int y) : x(x), y(y) {cout<< "Parameter Constructor called"<<endl;}~Point() { cout<<"Destructor called"<<endl; }int getX() const { return x; }int getY() const { return y; }void move(int newX, int newY) {x = newX;y = newY;} private:int x, y; };int main() {Point *p...

leetcode之删除有序数组中的重复项(C++)【代码】【图】

参考链接 https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 解题思路 使用双指针,一个指针锁定要被替换的位置,另一个指针寻找不同的元素,放在第一个指针右边的位置。 代码 class Solutio...

c++ 结构体 数组 指针 函数的遍历(笔记)【代码】

#include <iostream> #include <string> using namespace std;struct student{string sname;int score; };void print(student *s){for (int i = 0; i < 3; ++i) {cout<<(s+i)->sname<<" "<<(s+i)->score<<endl;} }int main() { struct student stu[3]; stu[0].sname="张三"; stu[0].score=100;stu[1].sname="李四"; stu[1].score=99;stu[2].sname="王五"; stu[2].score=80;student *e= stu;print(e);}初学c++遇到难点,在这做个笔...

【CCF CSP】【AC】201912-2:回收站选址(C++版)(只用到了结构体和数组)【代码】【图】

写给自己,也写给大家:把搜过的每一道题弄明白,别欺骗自己,也别辜负自己问题描述解题思路及注意点拿到这道题,在不会任何容器的使用下,我们首先应考虑到用结构体来表示每个位置处的垃圾,用结构体数组来表示n个位置处的垃圾。 其次考虑用结构体表示的垃圾其中应该包含哪些内容:根据题目可以确定必须要包括垃圾的位置坐标,那么还有什么?题目让我们在满足前两个条件下去统计对角线上垃圾分别为0、1、2、3、4的垃圾的个数,所以...

《剑指offer刷题笔记》10、 旋转数组的最小数字 【c++详细题解】【代码】【图】

题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个升序的数组的一个旋转,输出旋转数组的最小元素。 例如数组 3,4,5,1,2{3,4,5,1,2}3,4,5,1,2为 1,2,3,4,5{1,2,3,4,5}1,2,3,4,5 的一个旋转,该数组的最小值为 111。 数组可能包含重复项。 注意:数组内所含元素非负,若数组大小为 000,请返回 ?1?1?1。 样例 输入:nums=[2,2,2,0,1]输出:0思路1 (遍历)O(n)O(n)O(n) 原来的数组是一个升序的数组,...

《剑指offer刷题笔记》 2、不修改数组找出重复的数字 【c++详细题解】【代码】【图】

题目 给定一个长度为 n+1n+1n+1 的数组nums,数组中所有的数均在 1~n1~n1~n 的范围内,其中 n≥1n≥1n≥1。 请找出数组中任意一个重复的数,但不能修改输入的数组。 样例 给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。思考题:如果只能使用 O(1)O(1)O(1)的额外空间,该怎么做呢? 思路 (分治,抽屉原理) O(nlogn)O(nlogn)O(nlogn) 这道题目主要应用了抽屉原理和分治的思想。抽屉原理:n+1 个苹果放在 n 个抽屉里,那么至...

用c++求二维数组的最大子数组,进行单元测试【图】

一.实验目的 1,以指定格式的文本文件形式输入数组。 2,数组由一维变为二维。 3,熟练使用git常用命令将作业签入代码版本控制平台。 4,给出单元测试/代码覆盖率的最终覆盖率的报告。 二.实验过程 实验主要分为两大部分,第一,解决算法问题,编写程序代码。第二,复审代码和完成代码测试计划。 1.编写代码 1)以文本文件的形式输入数组 首先,在D盘建一个txt文本文件,里面存放了目标二维数组, 然后,将文本文件内容读取出来,存...

C++实验---数组类(II)【代码】

数组类(II) Description 封装一个模板数组类,用于存储数组和处理的相关功能,支持以下操作: Array::Array(int l)构造方法:创建一个长度为l的组对象。 Array::size()方法:返回Array对象中元素个数。 Array::put(int n)方法:按从大到小的顺序输出前n大元素,若数组长度小于n则从大到小输出全部元素。 下标运算符:返回下标所指的元素。 你设计一个模板数组类Array,使得main()函数能够正确运行。 函数调用格式见append.cc。 a...

剑指 Offer 56 - I. 数组中数字出现的次数(C++) 分组异或【代码】【图】

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 示例 1: 输入:nums = [4,1,4,6] 输出:[1,6] 或 [6,1]示例 2: 输入:nums = [1,2,10,4,1,4,3,3] 输出:[2,10] 或 [10,2]限制: 2 <= nums.length <= 10000 分组异或 思路 让我们先来考虑一个比较简单的问题: 如果除了一个数字以外,其他数字都出现了两次,那么如何找到出现一次的数...

剑指 Offer 42. 连续子数组的最大和(C++) 动态规划【代码】【图】

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示: 1 <= arr.length <= 10^5 -100 <= arr[i] <= 100 注意:本题与主站 53 题相同:https://leetcode-cn.com/problems/maximum-subarray/ 解题思路:class Solution { public:int maxSubArray(vector<int>&...

C++字符串数组中小写转大写的写法(指针)【代码】

大写字母好看 任务描述 本关任务:将一个字符串中的所有小写字母变成对应的大写字母,其它字母不变。 例如:对字符串“abc12! ef”执行函数后输出结果为“ABC12! EF” 测试说明: 测试输入:1q2w3ASD45sx~1 预期输出:1Q2W3ASD45SX~1 测试输入:as 12xfASA90[]kl{} 预期输出:AS 12XFASA90[]KL{} #include <iostream> using namespace std;void toUp(char* str);int main() {char s[1024];cin.getline(s, 1024); // 输入一行字符...

剑指 Offer 04. 二维数组中的查找(C++) 修剪路线【代码】

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30] ]给定 target = 5,返回 true。 给定 target = 20,返回 false。 限制: 0 <= n <= 1000 ...

C++二维数组【代码】

int m(3),n(2); int pos7[3]={1,2,3}; //正确,声明时初始化,维数要么全确定(常量),要么最高维空由初始化列表反推,但元素类型(低维)必须确定 // int pos6[m]={1,2,3}; //编译错,变量大小的对象不能被初始化,必须是常量大小 //error: variable-sized object may not be initializedint pos5[]={1,2}; //正确,一维数组的元素类型确定(int),最高维维数不定,维数由初始化列表反推, int pos4[][2]={{1,2},{11,12},{21,22}}; ...

C++ “an incomplete type” error(使用extern const 数组的问题)【代码】

开发中遇到一个问题,要做的事情是这样事的,在File_1.cpp定义了一个const的数组,在File_2.cpp中需要使用这个数组。 File_1.cpp // 声明和定义 extern const int s_data[] = {1, 2, 3};File_2.cpp // 声明 extern const int s_data[];// 某函数使用```cpp int num = sizeof(s_data) / sizeof(int); for (int i = 0; i < num; i++) {// get and use s_data[i] }编译过程中总是发现下面的error error: invalid application of ‘siz...

303. 区域和检索 - 数组不可变 & 304. 二维区域和检索 - 矩阵不可变 -leetcode刷题(C++)【代码】【图】

一、题目 303. 区域和检索 - 数组不可变 304. 二维区域和检索 - 矩阵不可变 二、分析 由于最多会调用 10^4次 sumRange 方法,所以在sumRange中计算数组的区域和,时间复杂度会非常高,于是乎这道题的目的就是让在构造函数中进行一些操作,使得每次调用sumRange函数时间复杂度降下来。 本题可以通过在构造函数中求前n项和的方式,将数组a的前n项和另存到a_sum数组中。 a[]01234a_sum[]013610 计算i~j的的数组区域和,比如计算[2~4]的...