练习2.2和练习2.3
头文件
#pragma once
#include<iostream>
#include<vector>
void Pentagonal(const std::vector<int> &inputs, int num);
inline bool IsValidNum(const int num, const std::vector<int> &v) {
if (num <= 0 || num >= 1024 || num <= v.size()) {
return false;
}
return true;
}
cc文件
#include "practice_2_2.h"
void Pentagonal(std::vector<int> &inputs, int num) {
// 先判断 num 是否合法
if (!IsValidNum(num, inputs)) {
return;
}
for (int i = inputs.size() + 1; i < num + 1;i++) {
int value = i * (3 * i - 1) / 2;
inputs.push_back(value);
}
}
void PrintElements(const std::vector<int> * inputs) {
for (int ele : *inputs) {
std::cout << ele << std::endl;
}
}
int main() {
std::vector<int> v;
Pentagonal(v, 10);
Pentagonal(v, 20);
PrintElements(&v);
// return 0 表示程序成功运行
return 0;
}
练习2.4
头文件
#pragma once
#include<iostream>
#include<vector>
const std::vector<int> * GetPentagonal(int num);
int GetValueFromIndex(int index, const std::vector<int> * v);
cc文件
#include "practice_2_4.h"
#include<string>
/*
我一开始的下面这种下面是错误的, 原因是仅仅是声明了一个
指向vector<int>的指针, 然而这个指针并没有指向任何的
对象, 所以直接调用 -> size()函数的话肯定是会报错的
*/
// const std::vector<int> * GetPentagonal(int num) {
// // 局部静态对象指针
// static std::vector<int> * v;
// if (num <= 0 || num > 1024) {
// return v;
// }
// for (int i = v -> size() + 1; i < num + 1; i++) {
// std::cout << "point" << i << std::endl;
// v -> push_back(i * (3 * i - 1) / 2);
// }
// return v;
// }
const std::vector<int> * GetPentagonal(int num) {
// 局部静态对象 直接初始化一个对象
static std::vector<int> v;
if (num <= 0 || num > 1024) {
return &v;
}
for (int i = v.size() + 1; i < num + 1; i++) {
v.push_back(i * (3 * i - 1) / 2);
}
return &v;
}
int GetValueFromIndex(int index, const std::vector<int> * v) {
// 判断是否为空指针
if (v == 0) {
return -1;
std::cout << "Error : v is nullptr" << std::endl;
}
// 判断 index 是否超出
if (index >= v -> size()) {
return -1;
std::cout << "Error : index too large!" << std::endl;
}
return (*v)[index];
}
int main() {
const std::vector<int> *v = GetPentagonal(10);
// 判断是否为空指针
if (v == 0) {
std::cout << "Error: v is nullptr" << std::endl;
}
std::cout << GetValueFromIndex(5, v) << std::endl;
// 确认下空指针是否为0
// 注意 指针可以和0比 一般来说对象不能和0比 要声明为指针
std::string* check = nullptr;
if (check == 0) {
std::cout << "the value of nullptr is 0" << std::endl;
}
return 0;
}
练习2.5/2.6
头文件
#pragma once
#include<iostream>
#include<vector>
int max(int a, int b);
float max(float a, float b);
std::string max(const std::string &a, const std::string &b);
int max(const std::vector<int> &v);
float max(const std::vector<float> &v);
std::string max(const std::vector<std::string> &v);
int max(const int *arr[]); // 数组只能声明为指针?
template <typename T> T TemplateMax(T a, T b);
cc文件
#include "practice_2_5.h"
#include<string.h>
int max(int a, int b) {
return (a > b) ? a : b;
}
float max(float a, float b) {
return (a > b) ? a : b;
}
std::string max(const std::string &a, const std::string &b) {
std::cout << "a:" << a << "," << "b:" << b << std::endl;
int bigger = a.compare(b);
return (bigger > 0) ? a : b;
}
template <typename T>
T TemplateMax(T a, T b) {
return (a > b) ? a : b;
}
int main() {
std::cout << max(1,2) << std::endl;
std::cout << max(1.2f, 2.4f) << std::endl;
std::cout << max("abc", "abcd") << std::endl;
std::cout << max(110, 112) << std::endl;
return 0;
}
先送外卖去了...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。