假设我有一个功能:
int foo (int A, char B){...}
Run Code Online (Sandbox Code Playgroud)
我想要实现的功能之一是用户能够通过Linux终端调用应用程序上的任何功能.因此,作为软件的输入,在终端中输入如下内容:
foo 2 'a'
然后我的应用程序解析它,并使用符号表,它能够找到其foo()所有参数的地址和类型.
但是,我不确定在调用它时如何将参数传递给函数,因为根据调用的函数,我可以有数百种不同的参数类型组合.
在调用函数之前,如果没有数百个嵌套的if语句将参数转换为正确的类型,有何提示如何实现?
该功能类似于GDB所具有的功能,您可以在其中执行call foo(2,'a')GDB调用.
我写了下面的代码,使用了一个Map.该程序查找string密钥出现的次数Map.如果只出现一次,则价值int为string重点应该是1,依此类推.这个程序运行并产生所需的输出 - 但我觉得这是纯粹的运气,因为我没有在任何地方初始化Map.我只是在做myMap[str]++- 这绝不保证最初的价值0.那么,如何初始化地图以便任何string键的值0在遇到之前我做了myMap[str]++?
#include<cstdio>
#include<string>
#include<iostream>
#include<map>
int main()
{
int t;
long int n;
std::string str;
std::map< std::string, int > myMap;
scanf("%d", &t);
while(t--)
{
scanf("%ld", &n);
std::cin.ignore();
while(n--)
{
getline(std::cin, str);
myMap[str]++;
}
for(std::map< std::string, int >::iterator it=myMap.begin(); it!=myMap.end(); it++)
printf("%s %d\n", it->first.c_str(), it->second);
printf("\n");
myMap.erase(myMap.begin(), myMap.end());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
样本输入:
2
6 …
你有没有觉得你的脑袋不适合算法?
我尝试解决最大子数组问题,并且在 Codewars 上遇到了这个解决方案:
var maxSequence = function(arr){
var min = 0, ans = 0, i, sum = 0;
for (i = 0; i < arr.length; ++i) {
sum += arr[i];
min = Math.min(sum, min);
ans = Math.max(ans, sum - min);
}
return ans;
}
console.log(maxSequence([-2, 1, -3, 4, -1, 2, 1, -5, -4]));Run Code Online (Sandbox Code Playgroud)
我了解如何使用线性时间复杂度解决这个问题Kadane's algorithm:
var maxSequence = function(arr){
let max = 0;
let localMax = 0;
for (let i = 0; i …Run Code Online (Sandbox Code Playgroud)比方说,我创建的C.一个简单的库调用地块比方说,我有一对夫妇的功能,例如PlotFunction(),SetTitle(),SetScale()等我们也可以说我想提供一些基本的情节,如Triangle,Rectangle等这是资源文件.我认为这些资源将被保存为数组(e.g. triangle[] = {0, 1, 2, 3, 2, 1, 0})
这是一个可以将数据包含在头文件中的示例吗?通常我认为头文件是为函数原型保留的,但这似乎是一个在头中包含变量/结构的实例.
这被认为是不好的做法吗?有更好的替代方案吗?
我有一个std::vector<vector<double>>我想填写一个功能.我需要在我的程序中稍后为某些计算存储一些3维坐标.
我的问题是如果我这样做:
//in classdefinition
std::vector<std::vector<double>> data;
myFunc()
{
std::vector<double> temp;
temp.push_back(1);
temp.push_back(2);
temp.push_back(3);
data.push_back(temp);
temp.clear();
//new data
temp.push_back(2);
temp.push_back(3);
temp.push_back(4);
data.push_back(temp);
}
Run Code Online (Sandbox Code Playgroud)
清除和重新填充temp会影响数据中的值吗?
我已经找到了这个http://www.cplusplus.com/reference/vector/vector/push_back/, 但由于解释是"将val的内容复制(或移动)到新元素." 我不知道该怎么想.对我来说,这听起来像是一个矛盾.
我认为如果变量作为参考传递是没有多大意义的,因为它们可以像我的情况一样只在有限的范围内有效.我的假设是对的吗?
其中一个是n*sqrt(n)另一个是n*log(n)*log(n).有没有办法计算哪一个更有效?
我正在制作摩尔斯电码转换器,它完成了,我解决了问题,但我不明白. 图片代表了问题
这是一些代码:
string txt,result;
int x;
cout << "Enter the text you want to convert\n";
getline (cin,txt);
x = txt.size();
char text[x];
strcat(text,txt.c_str());
cout<<"txt = "<<txt<<"\n"<<"text = "<<text<<endl;
Run Code Online (Sandbox Code Playgroud)
我只想知道它是什么char,以及为什么会出现.