我最近开始用Cpp编程,我遇到了一个问题,我无法解决,也找不到合适的答案。
我很感兴趣的是,为什么当我向一个函数(fillInArray函数)传递参数时,它没有改变任何东西。在调试器中,我发现vectorArray(我想传递的参数)根本没有改变,但是在这个函数中的vector上的pushback方法似乎有效,它增加了vector的大小。任何帮助都将非常感激,因为这个问题使我无法继续这个项目。
标题。h
#pragma once
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class header
{
private:
int numberOfBytes = NULL;
int number;
int argument;
vector<int> vectorArray;
//std::vector<int> vector2;
//std::vector<int> vector3;
public:
header();
~header();
void setBytes(int bytes);
int getBytes();
void askForBytes();
void fillInArray(vector<int> someVector);
void showArray();
void negateBytes();
void menu();
void addArrays();
void substractArray();
};
header.cpp
#include "header.h"
header::header()
{
askForBytes();
setBytes(number);
fillInArray(vectorArray);
//fillInArray(vector2);
showArray();
negateBytes();
showArray();
}
header::~header()
{
}
void header::setBytes(int bytes)
{
if (bytes % 8 == 0)
{
numberOfBytes = bytes;
cout << "You typed in: " << numberOfBytes << " bytes\n";
}
else
cout << "Wrong argument, number of bytes set to: " <<
numberOfBytes << " bytes" << endl;
}
void header::askForBytes()
{
cout << "Plz type in how many bytes: " << endl;
cin >> number;
}
int header::getBytes()
{
return numberOfBytes;
}
void header::fillInArray(vector<int> vector)
{
for (int i = 0; i < numberOfBytes; i++)
{
vector.push_back( rand() % 2);
}
}
void header::showArray()
{
for (unsigned int i = 0; i < vectorArray.size(); i++)
{
cout << vectorArray[i] << " ";
}
cout << endl;
}
void header::negateBytes()
{
for (int i = 0; i < numberOfBytes; i++)
{
if (vectorArray[i] == 0)
vectorArray[i] = 1;
else
vectorArray[i] = 0;
}
}
/*void header::menu()
{
cout << "Type argument to do stuff: " << endl <<
"1 to negate single vector\n 2 to add two vectors\n 3 to minus two vectors\n";
cin >> argument;
switch (argument)
{
case 1: negateBytes();
showArray(vector);
break;
case 2: addArrays();
showArray(vector);
break;
case 3: substractArray();
showArray(vector);
break;
default: cout << "Wrong argument";
}
}*/
void header::addArrays()
{
for (int i = 0; i < getBytes(); i++)
{
//if ((vector[i] && vector2[i]) == 1)
// vector3.push_back(0);
// else if ((vector[i] == 1 && vector2[i] == 0) || (vector[i] == 0 && vector2[i] == 1))
// vector3.push_back(1);
// else vector3.push_back(0);
}
}
void header::substractArray()
{
}
zadanie1.cpp=main.cpp
#include "header.h"
void showText()
{
cout << "text";
}
int main()
{
header head;
system("Pause");
return 0;
}
我还注释掉了一些变量和函数,我将在后面构建这些变量和函数。提前谢谢!
如果通过复制传递一个参数,您不应该奇怪为什么被调用方无法更改复制的对象:
它从来不知道这件事。
C++具有常量引用以避免复制(const T&;
),rvalue引用以启用移动(T&;
),lvalue引用以启用修改传递的参数(T&;
)。
(请注意模板中的rvalue引用可能是转发引用。)
当然,你也可以走C路由,通过指针传递。
void fillInArray(vector<int> someVector);
函数按值取向量。这意味着函数会得到传递给它的向量的副本。它可以对该副本进行操作,但这些更改在外部是看不见的。
如果希望该函数能够修改调用方的向量,则应该传递一个引用:
void fillInArray(vector<int>& someVector);
(需要在函数定义中进行相同的更改。)
我有我的函数,我正在那里填充,但调用这个函数后没有填充,但我知道它是在这个函数中填充的,因为我有那里的输出代码。 我像这样传递指针 为什么它不起作用?谢谢
将接受数组的函数改变为可变参数函数。 给定一个函数,返回一个闭包,将所有输入收集到一个接受函数的数组中。 const collectInto = fn => (...args) => fn(args); const Pall = collectInto(Promise.all.bind(Promise)); let p1 = Promise.resolve(1); let p2 = Promis
我有下面的代码 我的期望是,若map中并没有值(数组),它将返回对新创建的数组的引用,我可以将我的“值”添加到该数组中。 然而,我看到myContext地图是空的。似乎超级基本,我不明白。
问题内容: 这似乎是一个愚蠢的问题,但是此函数是否会实际影响变量(我将如何使用此变量的上下文更大,但这基本上是我不确定的问题)?(我专门问有关java) 问题答案: 考虑一个稍微不同的示例: 运行该程序的输出为: 该变量将更改为true,但是一旦方法返回,该参数变量就会消失(这就是人们所说的“超出范围”的意思)。但是,传递给方法的变量保持不变。
问题内容: 如标题所示,我需要知道方法参数中是否存在与java对应的语法,例如 (代码由维基百科提供) 问题答案: 是的,您可以这样写:
在 C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。 所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。下面是一个简单的示例: 运行结果: 10, 3.5, # 2
本文向大家介绍mysql不重启的情况下修改参数变量,包括了mysql不重启的情况下修改参数变量的使用技巧和注意事项,需要的朋友参考一下 通常来说,更新mysql配置my.cnf需要重启mysql才能生效,但是有些时候mysql在线上,不一定允许你重启,这时候应该怎么办呢? 看一个例子: mysql> show variables like 'log_slave_updates'; +-------
本文向大家介绍C语言中编写可变参数函数,包括了C语言中编写可变参数函数的使用技巧和注意事项,需要的朋友参考一下 通过stdarg.h头文件为函数提供了定义可变参数列表的能力。声明一个可变参数的函数类似: void f1(int n,...); 其中n表示参数列表个数,而用省略号来表示未知参数列表。stdarg.h中提供了一个va_list类型,用于存放参数。一个大概的使用过程类似: 看一个求和的例