Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;-传入一个向量并返回一个向量 对不起,对于NOOB问题,但例如,我已经有一个Excel插件,用C++编写,它只取一个数字并返回数字的平方(比如说,UntunUnand OutPutnUnin,OutPuthNUM=UnPutnUm ^ 2)现在我需要修改这个函数,使输入是一个1xn向量,输出是一个大小与数字平方相同的向量,我需要修改什么才能使它工作?例如,我需要改变输入是指针,因为C++不直接将向量作为原生类型(不像原来的平方函数中的两倍)。_C++_Vector - Fatal编程技术网

C++;-传入一个向量并返回一个向量 对不起,对于NOOB问题,但例如,我已经有一个Excel插件,用C++编写,它只取一个数字并返回数字的平方(比如说,UntunUnand OutPutnUnin,OutPuthNUM=UnPutnUm ^ 2)现在我需要修改这个函数,使输入是一个1xn向量,输出是一个大小与数字平方相同的向量,我需要修改什么才能使它工作?例如,我需要改变输入是指针,因为C++不直接将向量作为原生类型(不像原来的平方函数中的两倍)。

C++;-传入一个向量并返回一个向量 对不起,对于NOOB问题,但例如,我已经有一个Excel插件,用C++编写,它只取一个数字并返回数字的平方(比如说,UntunUnand OutPutnUnin,OutPuthNUM=UnPutnUm ^ 2)现在我需要修改这个函数,使输入是一个1xn向量,输出是一个大小与数字平方相同的向量,我需要修改什么才能使它工作?例如,我需要改变输入是指针,因为C++不直接将向量作为原生类型(不像原来的平方函数中的两倍)。,c++,vector,C++,Vector,谢谢var.array 将包含行数和列数,以及指向 实际数据(将是行*列的单个维度 XLOper)的数组。对于数组的每个元素,请验证 它是数字的(同样,测试xltype),并提取 字段var.num中的数字数据能否显示您尝试过的内容和结果?您是说Excel加载项必须以本机类型作为参数?如果是这种情况,那么您必须编写一个函数,将指向向量数据的指针和向量大小作为参数。注册函数时,您可以将参数类型声明为Excel。但它们都是C类型——这是一个C API。除了标量和字符串之外,还有一个Excel特定的结

谢谢 假设你有一个函数:

int processElement(int e) {
    ...
}
void processVector(std::vector<int>& v) {
    for (int i = 0; i < v.size(); ++i)
        v[i] = processElement(v[i]);
}
“现在我需要修改函数,使输入为1xn向量,输出为相同大小的向量”

要将其用于
std::vector
,可以包装此函数:

int processElement(int e) {
    ...
}
void processVector(std::vector<int>& v) {
    for (int i = 0; i < v.size(); ++i)
        v[i] = processElement(v[i]);
}
void processVector(std::vector&v){
对于(int i=0;i
请注意,要修改某些内容,不需要按值将其传递给函数并返回。您可以通过引用传递它。

该函数是一种很好的方法,可以执行以下操作:

#include <vector>
#include <algorithm>
#include <iostream>

double processElement(double e) {
    return e * e;
}

std::vector<double> processAllElements(const std::vector<double>& in) {
    // The output vector must be constructed to be the same size as the input.
    std::vector<double> out(in.size(), 0);

    // Process each element in the input vector into the output vector.
    // (input is unchanged)
    std::transform(in.begin(), in.end(), out.begin(), &processElement);
    return out;
}

int main() {
    std::vector<double> in;
    in.push_back(1);
    in.push_back(2);

    std::vector<double> out = processAllElements(in);

    std::cout << out[0] << "," << out[1];
}

但是,如果在编译时不知道向量大小,那么最好使用std::vector为您管理内存。

我不确定,但您可能必须执行操作路线。 (不管怎么说,这几乎是我们做的一切。)基本上, 您必须下载Excel XLL SDK ( 对于Excel 2010,但很多都与旧版本兼容 你可能已经在某个地方有了这个版本,因为 您一定打过电话给
xlfRegister
)。
在其中,您可以找到一个include文件
XLCALL.h
(或类似文件) 我不在办公室,我有所有的 信息),定义结构
XLOper
XLOper12
( 第一个是字符串的
char*
,第二个是
wchar\t*
),还有一些
#定义
指定其中的内容。你必须申报你的护照 函数的作用是获取指向此结构的指针并返回它。 (
P
Q
,具体取决于您是要使用
char
还是
wchar\u t
用于字符串。)然后必须解析 输入:它是一个表(查看struct member
xltype
),如果 所以,对于每个细胞,都是一个数字。同样地,你必须 使用数据创建XLOper,并返回指向它的指针

网站上有很多文档 . 它并不完美,但应该涵盖大多数常见情况。 (这比你在很多事情上发现的要好。)

FWIW:你函数的签名是

XLOper* myFunction( XLOper* tableIn );
我找不到
XLCALL.h
的在线副本,而且我也没有所有副本 宏的记忆,所以我不能太详细, 但大致来说,您必须首先测试
tableIn->xltype
是否指定数组;取决于 您将返回一个错误或将其视为一个错误 1x1阵列,如果没有。如果是数组,
tableIn->var.array
将包含行数和列数,以及指向 实际数据(将是行*列的单个维度
XLOper
)的数组。对于数组的每个元素,请验证 它是数字的(同样,测试
xltype
),并提取
字段
var.num

中的数字数据能否显示您尝试过的内容和结果?您是说Excel加载项必须以本机类型作为参数?如果是这种情况,那么您必须编写一个函数,将指向向量数据的指针和向量大小作为参数。注册函数时,您可以将参数类型声明为Excel。但它们都是C类型——这是一个C API。除了标量和字符串之外,还有一个Excel特定的结构
XLOper
。这如何帮助他与Excel C API接口(显然,它不知道
std::vector
)?通过
std::transform
很好地重用
processElement
,而无需显式迭代。@JamesKanze:我想我被问题上的标签误导了,这些标签是
C++
vector
。我将把答案留给可能的实现,但你是对的,它对Excel API问题没有帮助(我认为可以更清楚地说明这个问题。)--他对你的答案投了赞成票。他本可以更清楚地说明这个问题。但我不知道他到底有多理解C++和Excel API之间的区别---“因为C++不把向量当作一种本地类型”,这让我感到奇怪:C++不需要参数是本地类型。(就此而言,C也是如此,Excel界面使用一些非本机类型,如
XLOper
)Excel API是C,因此他不能使用
std::vector
。他必须使用Excel能够理解的类型。@JamesKanze:因为他没有提供任何代码或具体细节,所以我只根据这个问题回答。他说他有一个Excel加载项。但是他似乎对C++是什么有点困惑,什么是Excel API(纯C)。