1

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

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

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

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

谢谢

编辑1:

如果不是,它可以输出向量的最佳方式是什么?

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

谢谢

编辑2:

我很惊讶为什么 C++ 有这样一个标准,有什么解释吗?:)

4

6 回答 6

9

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

C++ 标准,3.6.1.2:

实现不应预定义主要功能。该功能不得重载。它的返回类型应该是 type int,否则它的类型是实现定义的。

.

如果不是,它可以输出向量的最佳方式是什么?

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

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

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

于 2012-05-30T17:43:18.290 回答
3

编号main必须以以下两种方式之一声明:

int main()

或者

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

除此之外的任何东西都不是标准的。

于 2012-05-30T17:42:04.623 回答
2

没有。
根据标准main()必须返回一个int并且只有那个。

于 2012-05-30T17:41:13.567 回答
1

不。

main必须返回int

其他函数可以自由使用其他名称并返回他们想要的任何内容。

于 2012-05-30T17:41:20.053 回答
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 上,我认为它是相同的,或者非常相似。不过不确定。

于 2012-05-30T18:37:10.993 回答
0

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

下面的陈述是错误 的见下面 Ben 的评论。有用的信息。

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

于 2012-05-30T17:43:38.527 回答