【C++\408考研必备】模板函数、内存分配、标准模板

简介: 【C++\408考研必备】模板函数、内存分配、标准模板

二维数组


char【7】【5】

char

合法形参: a【】【5】


char(*c)【5】;

c= new char【n】【5】;


char **x


STL


accumulate用于计算init和[first , last)内部所有元素的总和。需要提供一个init,表示当[first,last)为空的区间仍然可以获取一个明确定义的数值,如果想获得[first,last)内所有数值的总和,应将init设为0

二元操作符不必满足交换律和结合律,是的accumulate的行为顺序有着明确的定义:先将init初始化,然后针对[first,last)区间内的每一个迭代器i,依次执行init = init + *i(第一版本) 或者 init = binary_op(init, *i) (第二版本)


//版本1
template <class InputIterator,class T>
T accumulate(InputIterator first,InputIterator last,T init){
    for(;first != last; ++first){
        init += *first; //将每个元素数值累加到init身上
    }
    return init;
}
//版本2
template <class InputIterator,class T,class BinaryOperation>
T accumulate(InputIterator first,InputIterator last,T init,
             BinaryOperation binary_op){
    for(;first!=last;++first){
        init = binary_op(init, *first);//对每一个元素执行二元操作
    }
    return init;
}
#include <iostream>   //std::cout
#include <functional> //std::minuc
#include <numeric>    //std::accumulate
int my_function(int x,int y){return x + 2*y;}
struct my_class{
    int operator()(int x,int y){
        return x + 3*y;
    }
}my_object;
int main(){
    int init = 100;
    int numbers[] = {10,20,30};
//    std::cout << << std::endl;
    std::cout << "using default accumulate" << std::endl;
    std::cout << std::accumulate(numbers,numbers+3,init) << std::endl;
    std::cout << "using functional's accumulate" << std::endl;
    std::cout << std::accumulate(numbers,numbers+3,init,std::minus<int>()) << std::endl;
    std::cout << "using custom function" << std::endl;
    std::cout << std::accumulate(numbers,numbers+3,init, my_function) << std::endl;
    std::cout << "using custom object" << std::endl;
    std::cout << std::accumulate(numbers,numbers+3,init, my_object) << std::endl;
}
相关文章
|
4月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
47 3
|
2月前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
83 6
|
3月前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
101 4
|
3月前
|
算法 编译器 C++
【C++】模板详细讲解(含反向迭代器)
C++模板是泛型编程的核心,允许编写与类型无关的代码,提高代码复用性和灵活性。模板分为函数模板和类模板,支持隐式和显式实例化,以及特化(全特化和偏特化)。C++标准库广泛使用模板,如容器、迭代器、算法和函数对象等,以支持高效、灵活的编程。反向迭代器通过对正向迭代器的封装,实现了逆序遍历的功能。
45 3
|
3月前
|
编译器 C++
【c++】模板详解(1)
本文介绍了C++中的模板概念,包括函数模板和类模板,强调了模板作为泛型编程基础的重要性。函数模板允许创建类型无关的函数,类模板则能根据不同的类型生成不同的类。文章通过具体示例详细解释了模板的定义、实例化及匹配原则,帮助读者理解模板机制,为学习STL打下基础。
42 0
|
4月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
4月前
|
编译器 程序员 C++
【C++打怪之路Lv7】-- 模板初阶
【C++打怪之路Lv7】-- 模板初阶
32 1
|
4月前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
63 0
|
4月前
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
55 0
|
30天前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
67 19

热门文章

最新文章