动态1D阵列作为输入

Dynamic 1D array as input

本文关键字:输入 阵列 1D 动态      更新时间:2023-10-16

我试图获得整数的动态1D数组作为输入。情况是,我不知道会有多少输入。我有以下代码,但我知道这是错误的。你能告诉我怎么做吗?

     int main(string path,string aligned_path,vector<int>cams)
     {
        string path = "/home/iiith/resect/output.txt";
        findpoints(cams,path);
     } 

凸轮的大小实际上是未知的。我不知道他们会提供多少摄像头作为输入。我试图实现如下的东西

    ./a.out path1 path2 1 2 3 5 6

最后的数字将是凸轮。它可以是任意数量的摄像头。是否有可能将它们全部作为输入接收?是否有可能有一个输入参数是动态的如上所述?请帮帮我。那会很有帮助的。

您对main的定义无效。在C和c++中,main有严格的定义(尽管如果不使用参数可以忽略):

int main(int argc, char **argv)

一个常见的扩展是传入环境变量:

int main(int argc, char **argv, char **envp)

和if参数根本不使用:

int main()

main的参数定义如下:argc是参数列表中元素的个数。以下每个argv[0] ..argv[argc-1]包含函数的参数。argv[0]是可执行文件本身的名称。argv[1]与您的例子将是path1

所以,你知道有多少基于argccams。当然,您必须将argv[x]中的字符串值复制到向量中的相关位置,可能使用std::stoi(...)将其转换为整数值。

main的签名必须为int main(int argc, char* argv[])(或等价的int main())。您可以在自己的代码中将参数处理成更有用的东西。下面是一个快速而草率的示例(没有适当的错误处理等)。

#include <iostream>
#include <cstdlib>
#include <vector>
int main(int argc, char * argv[])
{
    std::vector<int> nums;
    nums.reserve(argc-3);
    int pos = 3;
    // Read args into vector of ints
    while (pos < argc)
    {
        nums.push_back(atoi(argv[pos]));
        ++pos;
    }
    // Print them
    for (auto i : nums) std::cout << i << 'n';
}

这里是一个运行:

$ ./a.out path1 path2 1 2 3 5 4
1
2
3
5
4

以防不清楚:argc包含传递的参数的数量,包括程序的名称。对于$ ./a.out argc=1,对于$ ./a.out some list of args argc=5

那么argv是一个c风格的字符串数组(以NUL结尾的const char * s),包含每个参数的文本。

请注意,严格来说,argv数组比它需要的长度长1,并且最后一项保证是NULL指针。


对于标准极客,我没有适当的C++ 2011标准,这是来自N3337:

3.6.1主要功能

2实现不能预定义main函数。此函数不得重载。它应该有一个返回类型为int的类型,否则其类型为实现定义。所有的实现都应该允许main的定义如下:

int main() { /* ... */ }

int main(int argc, char* argv[]) { /* ... */ }

在后一种形式argc传递给程序的参数的个数运行程序的环境。如果argc是非零的参数应在argv[0]argv[argc-1]中作为指向以空结束的多字节的初始字符的指针string (ntmbs s)(17.5.2.1.4.2)和argv[0]应该是指向NTMBS的初始字符,表示用于的名称调用程序或"。argc的值不能为负。的"argv[argc]"的值必须为"0"。[注:建议任何。argv后可添加更多(可选)参数。-end note]