C++ 运算符+;=应用于std::valarray<;int*>;
以下是一个例子:C++ 运算符+;=应用于std::valarray<;int*>;,c++,pointers,operator-keyword,valarray,C++,Pointers,Operator Keyword,Valarray,以下是一个例子: #include <iostream> #include <string> #include <valarray> int main() { std::valarray<std::string> vs(2); // vs[0] += "hello"; // works // vs[1] += "hello"; // works vs += "
#include <iostream>
#include <string>
#include <valarray>
int main()
{
std::valarray<std::string> vs(2);
// vs[0] += "hello"; // works
// vs[1] += "hello"; // works
vs += "hello"; // works
std::cout << vs[0] << std::endl;
std::cout << vs[1] << std::endl;
std::valarray<int*> vi(2);
vi[0] = new int[2];
vi[0][0] = 0;
vi[0][1] = 1;
vi[1] = new int[2];
vi[1][0] = 2;
vi[1][1] = 3;
std::cout << vi[0][0] << std::endl;
std::cout << vi[1][0] << std::endl;
// vi[0] += 1; // works
// vi[1] += 1; // works
vi += 1; // error: invalid operands of types 'int*' and 'int*' to binary 'operator+'
std::cout << vi[0][0] << std::endl;
std::cout << vi[1][0] << std::endl;
}
#包括
#包括
#包括
int main()
{
标准:valarray vs(2);
//vs[0]+=“你好”;//有效
//vs[1]+=“你好”;//有效
vs+=“你好”;//有效
STD::CUT> P>我在C++中最后一次涉猎已经有一段时间了,请在术语/细节方面原谅任何小错。
您的错误归结为valarray上的+=
试图对valarray的每个元素执行操作。默认情况下(如果我的内存没有欺骗我的话),对于存储在valarray中的整数指针没有+
操作。您需要首先为整数指针指定一个重写的+
运算符
另外,为了解释为什么其他操作工作而vi+=1
不工作:
vi[0]+=1;//有效
vi[1]+=1;//有效
这些是有效的,因为(我不知道这是否是您打算做的)您已经在这些vararray字段中放置了整数(newint(n)
将创建一个值为n的int),每个值为2。因此vi[0]是2,vi[0]也是2。您还可以编写
vi[0]=2;
vi[1]=2;
我假设您试图在vi[0]
/vi[1]
中存储一个整数数组,这将是
vi[0]=新整数[2];
vi[1]=新整数[2];
问题是,vi[0][0]=0
,等等……如果这些字段不存在,只需提示valarray创建这些字段,当然了
<代码> STD::CUT我在C++中的最后一个涉猎已经有一段时间了,所以请原谅术语中的任何细节或细节。
您的错误归结为valarray上的+=
试图对valarray的每个元素执行操作。默认情况下(如果我的内存没有欺骗我的话),对于存储在valarray中的整数指针没有+
操作。您需要首先为整数指针指定一个重写的+
运算符
另外,为了解释为什么其他操作工作而vi+=1
不工作:
vi[0]+=1;//有效
vi[1]+=1;//有效
这些是有效的,因为(我不知道这是否是您打算做的)您已经在这些vararray字段中放置了整数(newint(n)
将创建一个值为n的int),每个值为2。因此vi[0]是2,vi[0]也是2。您还可以编写
vi[0]=2;
vi[1]=2;
我假设您试图在vi[0]
/vi[1]
中存储一个整数数组,这将是
vi[0]=新整数[2];
vi[1]=新整数[2];
问题是,vi[0][0]=0
,等等……如果这些字段不存在,只需提示valarray创建这些字段,当然了
std::cout您可以看到valarray
的operator+
重载。正如您所看到的,没有重载适用于您尝试执行的操作(添加int
和指针)。您可以看到操作符+
重载适用于valarray
。正如您所看到的,没有重载适用于您尝试执行的操作(添加一个int
和一个指针)。std::valarray
对异构二进制操作没有重载,但对其他函数有一个全面的功能
std::valarray
对于异构二进制操作没有重载,但是对于其他函数,它有一个包罗万象的功能
为什么您要使用一个已经动态分配元素的容器,并将动态分配的元素放在其中?这有什么可能的用途?我认为需要更多关于您正在尝试做什么的上下文,而不仅仅是您当前尝试如何做的上下文。不将int*
存储在std::valarray
”和d中如何o您真的想手动更改指针地址吗?这绝不是一个好主意。@underline_d和@Darkproduct:这只是一个简化的示例。我的目的是利用std::valarray
同时增加多个指针。您的程序有未定义的行为。new int(2);
动态分配一个int
值为2
,而不是2int
s@Caleth好的,对不起,我想写newint[2]
为什么您要使用一个已经动态分配元素的容器,并将动态分配的元素放在其中?这可能有什么用途?我认为需要更多关于您尝试做什么的上下文,而不仅仅是您当前尝试如何做的上下文。不将int*
存储在std::valarray
?你真的想手动更改指针地址吗?这绝对不是一个好主意。@underline_d和@Darkproduct:这只是一个简单的例子。我的意图是利用std::valarray
来“同时”增加多个指针。你的程序有未定义的行为。new int(2);
动态分配一个int
值为2
,而不是2int
s@Caleth好的,对不起,我想写newint[2]
由于运算符+=
对int*
有效,我一直在寻找使用此运算符的方法。由于运算符+=
对int*
有效,我一直在寻找使用此运算符的方法。是的,这就是我寻找“类型”的原因哪一个适合递增int*
。这可能吗?此外,来自操作+=1
的int
以标准方式适当转换为递增指针。@bou您可以创建自己的重载并让它做任何您想做的事情。除此之外,您什么都不能做。是的,这就是为什么我是lo查找一个适合于递增int*
的“类型”。这可能吗?此外,来自操作+=1的int
vi.apply([](int * p){ return p + 1; });