返回vector指针案例

void prog1_static(void)
{
    int pos = 9;

    // elem will hold the element‘s value
    vector<int> *elem;
    elem = fibon_seq2(pos);
    cout << elem->size() << endl;

    for (int in = 0; in < elem->size(); in++)
    {
        cout << elem[0][in] <<" ";
    }
    cout << endl;

    pos = 18;
    elem = fibon_seq2(pos);
    cout << elem->size() << endl;

    for (int in = 0; in < elem->size(); in++)
    {
        cout << elem[0][in] <<" ";    //error
    }
    cout << endl;
}

下面的函数返回elems的地址。可以返回静态对象的地址

通过去读取vector的返回值可以实现减少计算工作量的方法。
cout << elem[0][in] <<" ";
这个用法一定要注意,试了很就才发现。
elem是一个向量指针,这个指针指向某一个向量的,
因此类似于c语言中一个指针指向二位数组。

vector<int> *fibon_seq2( int size )
{
    const int max_size = 1024;
    static vector< int > elems;

    if ( size <= 0 || size > max_size )
    {
        cerr << "fibon_seq(): oops: invalid size: "
             << size << " -- can锟絫 fulfill request.\n";
        return 0;
    }

    // if size is equal to or greater than elems.size(),
    // no calculations are necessary ...
    for ( int ix = elems.size(); ix < size; ++ix )
    {
        if ( ix == 0 || ix == 1 )
        {
            elems.push_back( 1 );
        }
        else
        {
            elems.push_back( elems[ix - 1] + elems[ix - 2] );
        }
    }
    return &elems;
}

  

原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/11221428.html

时间: 2024-10-02 23:26:28

返回vector指针案例的相关文章

返回局部指针变量

返回值为数值时,返回局部变量可以,而返回值为引用或指针时,则存在风险. 局部变量是存在于栈中的,函数被调用时先在栈中为变量申请空间,调用完成释放变量空间.函数在返回参数的时候是这样的,先把要返回的数放在寄存器eax中,然后回到主函数中取出eax中的数值放在变量里,所以这样是不涉及函数中变量地址的. 如果要返回引用,也就是变量地址,那么它会把这个变量的地址放在eax中,(注意这个地址是位于函数的栈空间里的,出了这个函数,这块内存就会被系统标记为可占用(就是其它程序可以占用)),回到主函数后系统会把

函数返回局部指针变量是否可行?

我们大家都知道指针函数的返回指针不能指向函数内的自动变量,如果需要返回函数的内部变量的话,就需要将该变量声明为静态变量.为什么函数能够返回 静态变量的地址而不能返回局部自动变量的地址,到底什么样的对象能够返回其地址,而什么样的对象不能够返回其地址?静态变量与局部自动变量的主要区别是什 么? 要想明白这些就需要理解程序的内存布局情况 程序的存储区域分为:代码段.只读数据段.已初始化的读写数据段.未初始化的数据段.堆.栈. 1.代码段.只读数据段.已初始化的读写数据段.未初始化的数据段都属于静态区域

C++ —— 返回数组指针的函数

基础知识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. 定义一个 返回数组指针的函数 的方法,以 一个接收参数为 含有10个整型元素的数组的引用  和 返回一个含有10个整型元素的数组的指针 的函数为例. 法一:(不使用别名) int (*getCopyArr(int (&arr)[10]))[10] { int (*n)[10] = (int (*)[10])new int[10]; for (int i = 0; i < 10; i++) (*n)[i] = arr[i

C++ 函数返回数组指针的问题

提醒一下:int *func(){int a[10] = {5};return a;}是非法的,因为 a 是局部变量,被申请在系统栈中,局部变量在函数返回后会被销毁,于是你返回的指针指向的是一段已经被系统回收的内存,这样的访问是非法的.int *func(){int *a = new int[10];a[0] = 5;return a;}是合法的,通过new运算符申请的一段内存是在系统堆上的,其销毁不受系统控制,而由程序员控制,所以如果在外部有int *ret = func(),将 ret 使用

声明返回数组指针的函数

时间:2014.05.18 地点:基地 ------------------------------------------------------------------------ 一.基本知识 常识:数组不能被拷贝,函数不能返回数组,只能返回数组的指针或者引用. typedet int arr[10]; //arr是类型别名,表示的类型含有10个整数的数组 上述语句等效于 using arr=int[10] 在来复习几个基础知识 int arr[10]; //arr是一个含有10个整数的数

返回类型和return语句:无返回值函数,有返回值函数,返回数组指针

重点: 1.return语句功能:终止当前正在执行的函数并将控制权返回到调用该函数的地方.Return语句两种形式: Return: Return expression; 2.返回void的函数不要求非得有return语句,因为在这类函数的最后一句后面会隐式地执行return. 3.Void函数如果想中间退出,可以使用return,作用相当于break,提前退出. 4.一个返回类型是void的函数也可以使用return expression形式,不过return语句的expression必须是另

数组、指针数组、数组指针、返回数组指针的函数的关系

直接上代码吧,解释说得很清楚了. // C++Primer.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> using namespace std; int (*function(int i))[10];//返回数组指针的函数 int main() { cout<<"数组.指针数组.数组指针.返回数组指针的函数:"<<endl<<endl; in

【C语言】自己编写程序实现strchr函数。即在给定字符串中找特定的字符并返回该处指针。

<pre name="code" class="cpp">//自己编写程序实现strchr函数.即在给定字符串中找特定的字符并返回该处指针. #include <stdio.h> char * my_strchr(char const *str,int ch) { while(*str!='\0') { if(*str!=ch) str++; else return str; } printf("未找到该字符\n"); r

下列函数的功能是统计并返回形参指针S所指向的字符串所含字符‘A’的个数。

下列函数的功能是统计并返回形参指针S所指向的字符串所含字符‘A’的个数.试完成程序,写出应填写在程序空框中的代码. int counts(char *s) int n: for( n=0:. : s++) return n: 为统计字符指针s所指字符串包含的某字符的出现次数,必须用一个循环顺序考察整个字符串.由从指针s所指字符串的首字符开始,每考察一个字符后,指针s后移一个字符位置,考察循环直至字符率结束终止.所以填写在空框中的正确代码可写成*S!=‘\ 0’.由于字符串束符‘\ 0’的代码为