我想知道在main()
中返回一个向量是否可以?例如,
aSpecialVectorType main()
{
aSpecialVectorType xxx(vector::zero);
// do something here;
return xxx;
}
我需要在class aSpecialVectorType;
之前转发声明“main()
”吗?
顺便说一句,在c ++中使用“main
”之外的其他名称是否合法?
由于
如果没有,它输出矢量的最佳方式是什么?
我的朋友让我给他一个黑盒子,可以作为“矢量输入和矢量输出”,他将使用他的matlab代码来调用我的代码。这就是我要问的原因。 我知道如何引入,但不确定是否有一种简单的方法来输出矢量。
由于
我很惊讶为什么C ++有这样的标准,任何解释? :)
答案 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的评论。有用的信息。
请注意,尽管入口点的名称可以更改,但它必须符合标准参数和返回类型。