可以在main中返回向量吗

时间:2012-05-30 17:39:03

标签: c++

我想知道在main()中返回一个向量是否可以?例如,

aSpecialVectorType main()
{
    aSpecialVectorType xxx(vector::zero);
    // do something here;
    return xxx;
}

我需要在class aSpecialVectorType;之前转发声明“main()”吗?

顺便说一句,在c ++中使用“main”之外的其他名称是否合法?

由于

EDIT1:

如果没有,它输出矢量的最佳方式是什么?

我的朋友让我给他一个黑盒子,可以作为“矢量输入和矢量输出”,他将使用他的matlab代码来调用我的代码。这就是我要问的原因。 我知道如何引入,但不确定是否有一种简单的方法来输出矢量。

由于

EDIT2:

我很惊讶为什么C ++有这样的标准,任何解释? :)

6 个答案:

答案 0 :(得分:9)

在C ++中,main需要返回int

  

C ++标准,3.6.1.2:

     

实现不应预定义主函数。此功能不应过载。它应具有类型int的返回类型,否则其类型是实现定义的。

  

如果没有,它输出矢量的最佳方式是什么?

输出一个向量,您需要将其复制到文件或输出流:

ostream_iterator<int> out_it(cout, ", ");
copy(myvector.begin(), myvector.end(), out_it);

上面的代码片段将vector<int>的内容写入标准输出。

答案 1 :(得分:3)

没有。 main 必须以下列两种方式之一声明:

int main()

int main(int argc, char*[] argv)

除此之外的任何事情都不是标准的。

答案 2 :(得分:2)

不。
根据标准main(),必须返回int且仅返回。

答案 3 :(得分:1)

没有

main必须返回int

其他功能可以自由拥有其他名称并返回他们想要的任何内容。

答案 4 :(得分:1)

要扩展dashblinkenlight的答案,以下是两个程序可以通信的方式。不是通过一个捕获另一个的返回值,而是通过一个称为“管道”的过程,将一个程序的标准输出指向另一个程序的标准输入。在这里,我将在一个程序中打印出一个字符串列表,然后另一个程序将在其标准输入上找到一个字符串列表,然后我将向您展示如何将两者结合使用:

// Output program
#include <vector>
#include <string>
#include <iostream>

int main()
{
    using namespace std;

    vector<string> v;
    v.push_back("one");
    v.push_back("two");
    v.push_back("three");

    for (int i=0; i<v.size(); ++i)
        cout << v[i] << '\n';
}

// input program
#include <iostream>
#include <vector>
#include <string>

int main()
{
    using namespace std;

    vector<string> v;
    for (string tmp; cin >> tmp; )
        v.push_back(tmp);

    // print the strings in reverse order
    for (int i=v.size()-1; i>=0; --i)
        cout << v[i] << '\n';
}

如果您自己运行第一个程序,它将只打印3个字符串。如果您自己运行第二个程序,它将提示用户输入字符串,直到他使用终止命令。但是在所有最广泛使用的操作系统上,您可以将两者结合在一起。然后第一个的输出将成为第二个的输入。在类Unix系统上,你可以这样做:

./output_program | ./input_program

在Windows上,我认为它是相同的,或者非常相似。但不确定。

答案 5 :(得分:0)

你的第一个问题的答案是否定的。 第二个问题的答案是肯定的,但您需要指定可执行文件入口点的名称(通过链接器设置......可能并非在所有链接器工具上都可用)。

以下陈述错误 请参阅下面的Ben的评论。有用的信息。

请注意,尽管入口点的名称可以更改,但它必须符合标准参数和返回类型。