在c ++中返回一个std :: vector

时间:2016-01-13 00:09:06

标签: c++ c++11 vector return-value

修改

*请注意这个话题,因为我在这个论坛上不能再提问了。 编程是我的生命,我因为自动禁止而陷入困境。谢谢(或者我需要主持人的帮助来解决这个问题*

我是c ++的初学程序员,我想基本上返回std::vector 当我调试我的代码时,我得到函数调用缺少参数列表。这是我的简单代码

感谢您的帮助

#include "stdafx.h"
#include <vector>
#include <iostream>

static std::vector<int> returnStaticVector();

static std::vector<int> returnStaticVector(){
    std::vector<int> vectorInt = std::vector<int>();
    vectorInt.push_back(0);
    return vectorInt;

}

int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<int> a = std::vector<int>();

    a = returnStaticVector(); // Compile , but error when I try to access to the size of the std::vector

    //int size = a.size; //error C3867: 'std::vector<int,std::allocator<_Ty>>::size': function call missing argument list; use '&std::vector<int,std::allocator<_Ty>>::size' to create a pointer to member  
    //int size = &a.size; // & Illegal operation
    //int& size = a.size; //error C3867: 'std::vector<int,std::allocator<_Ty>>::size': function call missing argument list; use '&std::vector<int,std::allocator<_Ty>>::size' to create a pointer to member 
    int* size = a.size; //error C3867: 'std::vector<int,std::allocator<_Ty>>::size': function call missing argument list; use '&std::vector<int,std::allocator<_Ty>>::size' to create a pointer to member   

    return 0;
}

2 个答案:

答案 0 :(得分:9)

std::vector中,size是成员函数,而不是成员变量。你这样使用它:

int size = a.size();

如果没有括号,则表示语法错误。

顺便说一句,你可以做的另一件事就是简化代码:声明这样的向量:

std::vector<int> a;

或者在C ++ 11中

std::vector<int> a{};

这两个都将默认构造向量 - 这适用于任何类类型。

这样做,

std::vector<int> a = std::vector<int>();

不是很好,因为它更长,让你输入两次,而且它复制初始化它而不是默认构造它,这稍微不同,可能效率较低。

答案 1 :(得分:1)

首先要做的事 - 代码中的真正编译问题是因为您使用了 a.size 而不是 a.size()。尝试更改它,代码应该成功编译。

除此之外,我不认为像你所做的那样返回一个矢量是一个好主意。尝试使用调用函数的引用传递向量。这是更好的设计。

如果您仍在考虑按价值回报,请考虑使用Copy elision,这是编译器实施的优化,以防止在许多情况下出现不必要的副本。在许多情况下,它使得按值或按值传递是可行的。

在此处阅读有关复制品的更多信息: -

http://en.cppreference.com/w/cpp/language/copy_elision

What are copy elision and return value optimization?