随机输入两个字符数组,如果第二个数组包含于第一个数组中,则输出“第二个数组包含于第一个数组中”字样,且输出第二个数组在第一个数组中的起始索引;如果第二个数组不包含于第一个数组中,则输出“第二个数组不包含于第一个数组”字样。
例如,第一个数组为[a s d f g h j k ],如果第二个数组为[f g h],输出结果为:第二个数组包含于第一个数组中,起始索引为 3;如果第二个数组为[f v h],输出结果为:第二个数组不包含于第一个数组中。
2024年07月23日
随机输入两个字符数组,如果第二个数组包含于第一个数组中,则输出“第二个数组包含于第一个数组中”字样,且输出第二个数组在第一个数组中的起始索引;如果第二个数组不包含于第一个数组中,则输出“第二个数组不包含于第一个数组”字样。
例如,第一个数组为[a s d f g h j k ],如果第二个数组为[f g h],输出结果为:第二个数组包含于第一个数组中,起始索引为 3;如果第二个数组为[f v h],输出结果为:第二个数组不包含于第一个数组中。
2024年07月23日
在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下面是我总结的,C++开发者都需要学习和使用的C++11新特性。
auto
在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类型的占位符,通知编译器去根据初始化代码推断所声明变量的真实类型。各种作用域内声明变量都可以用到它。例如,名空间中,程序块中,或是for循环的初始化语句中。
2024年07月23日
在C++中,数组是一种复杂的数据类型,它们有一些特性和限制,导致数组不支持直接的复制(copy)和赋值(assignment)操作,主要有以下几个原因:
1. 固定大小:C++中的数组是静态数组,其大小在定义时就被固定了,无法在运行时改变大小。这就导致了复制和赋值的问题,因为如果你试图复制或赋值一个数组,你需要知道目标数组的大小,而这通常不是在编译时可知的,因此难以进行自动的复制和赋值操作。
2024年07月23日
两分钟掌握“C++之数组赋值”的技巧。
我是老妖,之前了解到数组就像放数据的柜子,也就是说数组本质上是一个可以存储大量数据的容器。既然可以存储数据,那么今天就来探讨一维数组的赋值方法。在之前的记录游戏战斗得分的代码中,rotu使用了cin语句来给数组score赋值。
2024年07月23日
想弄懂C语言中数组和指针的关系吗?这篇文章就占据你三分钟时间,看完你肯定会有收获!
数组声明为 数据类型 名称[ constant-size ],并将一个数据类型的一个或多个实例分组到一个可寻址的位置
2024年07月23日
函数、指针、数组结合到一起就是函数指针数组。
首先它是一个数组,这个数组的元素是函数指针(指向函数的指针)。
如:
int(*fn[])(int,int);
一般的函数指针是这样定义的:
int(*fn)(int,int);
一般的指针函数是这样定义的:
2024年07月23日
指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。今天我们就来聊一聊数组和指针千丝万缕的关系;
指针可以用来访问数组,也可以用来改变数组成员,这点与数组本身的下标运算符功能并无区别,请看下面程序演示:
2024年07月23日
#include "../utils/common.hpp"
#include <iterator>
#include <utility>
#include <vector>
class MaxHeap {
private:
vector<int> maxHeap;
int left(int i) {
return 2*i+1;
}
int right(int i) {
return 2*i+2;
}
int parent(int i) {
return (i-1)/2;
}
void siftUp(int i) {
while (true) {
int p = parent(i);
if(p<0 || maxHeap[i] <=maxHeap[p]) {
break;
}
swap(maxHeap[i],maxHeap[p]);
i = p;
}
}
void siftDown(int i) {
while (true) {
int l = left(i),r = right(i),ma = i;
if(l < size() && maxHeap[l] > maxHeap[ma]) {
ma = l;
}
if(r < size() && maxHeap[r] > maxHeap[ma]) {
ma = r;
}
if(ma == i) {
break;
}
swap(maxHeap[i],maxHeap[ma]);
i = ma;
}
}
public:
MaxHeap(vector<int> nums) {
maxHeap = nums;
for (int i = parent(size() -1); i >= 0; i --) {
siftDown(i);
}
}
int size() {
return maxHeap.size();
}
bool isEmpty() {
return size() == 0;
}
int peek() {
return maxHeap[0];
}
void push(int val) {
maxHeap.push_back(val);
siftUp(size()-1);
}
void pop() {
if(isEmpty()) {
throw out_of_range("堆为空");
}
swap(maxHeap[0],maxHeap[size()-1]);
maxHeap.pop_back();
siftDown(0);
}
void printHeap() {
cout << "堆的数组表示:";
printVector(maxHeap);
cout << "堆的树状表示:" << endl;
TreeNode *root = vectorToTree(maxHeap);
printTree(root);
freeMemoryTree(root);
}
};
int main() {
vector<int> vec = {9,8,6,6,7,5,2,1,4,3,6,2};
MaxHeap maxHeap(vec);
cout << "\n输入列表并建堆后" << endl;
maxHeap.printHeap();
int peek = maxHeap.peek();
cout << "\n堆顶元素为 " << peek << endl;
/* 元素入堆 */
int val = 7;
maxHeap.push(val);
cout << "\n元素 " << val << " 入堆后" << endl;
maxHeap.printHeap();
/* 堆顶元素出堆 */
peek = maxHeap.peek();
maxHeap.pop();
cout << "\n堆顶元素 " << peek << " 出堆后" << endl;
maxHeap.printHeap();
/* 获取堆大小 */
int size = maxHeap.size();
cout << "\n堆元素数量为 " << size << endl;
/* 判断堆是否为空 */
bool isEmpty = maxHeap.isEmpty();
cout << "\n堆是否为空 " << isEmpty << endl;
return 0;
}