练习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; bool bigger = a.compare(b); return bigger ? 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;}
补充
- 练习2.5中的字符串比拟, 应用
>
操作符 和a.compare(b)
都无奈正确返回后果, 留一个问题在这, 心愿好心人能予以解答。https://segmentfault.com/q/10...
先送外卖去了...