Jul*_*les 0 c++ arrays pointers function
编辑:如果我试图在没有全局或静态且没有矢量o动态向量的情况下做什么呢?
我正在尝试创建两个向量并且具有一个函数,该函数通过地址传递一个新向量,该向量是两个数组中每个元素的商.即V1为1 1 2 2 3 4 V2为2 2 1 1 2 2,预期结果为2 2 2 2 6 8
我的问题是当我从"quoziente"函数发送"r"结果时因为我收到随机数.我认为问题在于该函数仅在执行期间存在,但是当它停止运行时,它也会随着变量而消失.我应该怎么做?我确信我将正确的地址传递给"ris".我甚至尝试打印出操作的元素,我确信我正在做正确的操作.任何帮助真的很感激!谢谢
这是代码:
1 #include <iostream>
2 using namespace std;
3
4
5
6 void readarray (int* v, int dim) {
7 for(int i=0; i<dim; i++) {
8 cin >> v[i];
9 }
10 }
11
12 void printarray(int* v, int dim) {
13 for(int i=0; i<dim; i++) {
14 cout << v[i] << " ";
15 }
16 cout << endl;
17 }
18
19 int main() {
20 int v1[7];
21 int v2[7];
22 int *ris;
23
24 cout << "V1";
25 readarray(v1,7);
26 cout << "V2";
27 readarray(v2,7);
28 ris = quoziente(v1,v2,7);
29 cout << "V1";
30 printarray(v1,7);
31 cout << "V2";
32 printarray(v2,7);
33 cout << "ris ";
34 printarray(ris,7);
35
36 return 0;
37 }
38
39 int* quoziente (int* v1, int* v2, int dim) {
40 int r[7];
41
42 for(int i=0; i<dim; i++) {
43 r[i] = v1[i] * v2[i];
44 cout << r[i] << " ";
45 }
46 cout << endl;
47 return r;
48 }
Run Code Online (Sandbox Code Playgroud)
如果您使用std :: vector或其他类似的容器,这将更容易管理.
std::vector<int> quotient (std::vector<int> left, std::vector<int> right)
{
std::vector<int> result;
auto left_iterator = left.begin();
auto left_end = left.end();
auto right_iterator = right.begin();
auto right_end = right.end();
for(; left_iterator != left_end && right_iterator != right_end;
left_iterator++, right_iterator++)
{
int quotient = (*left_iterator) * (*right_iterator);
result.push_back(quotient);
std::cout << quotient << " ";
}
std::cout << std::endl;
return result;
}
Run Code Online (Sandbox Code Playgroud)
当然,正如所提到的,还有std :: algorithm实用程序也更适合这一点,例如std::transform- 请参阅P0W的答案.但是,我猜这是为了你自己的学习,所以看看std库容器在一般工作中也很重要.