我想有一个类似于python的函数的输入,这样我就可以在函数内部循环它。但是我不确定应该如何定义输入
func(["a","b","c"])
所以它也可以被称为
func(["a","b","c", "d"])
在c++中真的有这样的输入方式吗?如果有人也建议一种循环的方法,我会很高兴,因为我的c++经验是相当基本的。
编辑,
将会很高兴,如果这"[]"样式的括号可以代替"{}"与python类似,且代码最少。
是的,您可以使用std::initializer_list
来做到这一点:
#include <initializer_list>
template<class T>
void func(std::initializer_list<T> il) {
for (auto x : il);
}
int main() {
func({"a","b","c"});
func({"a","b","c", "d"});
}
会很高兴如果这"[]"样式的括号可以代替"{}";与python类似,且代码最少。
不幸的是,多维下标操作符只在c++ 23中工作,详细信息请参见p2128。
您可以使用std::initilializer_list
:
#include <iostream>
#include <initializer_list>
void foo(std::initializer_list<std::string> l){
for (const auto& s : l) std::cout << s << " ";
}
int main() {
foo({"a","b","c"});
}
我认为python不区分字符和字符串字面量,但c++可以。"a"
是字符串字面值,而'a'
是字符字面值。如果你确实需要字符,你可以使用std::initializer_list<char>
。您也可以考虑简单地将std::string
传递给函数(foo("abc")
)。
会很高兴如果这"[]"样式的括号可以代替"{}"与python类似,且代码最少。
最好习惯不同的语言是不同的。试图让一种语言的代码看起来像另一种语言通常不会成功,因为python和c++不仅在细节上非常不同。
其他答案将工作,但我认为你寻找std::vector
,这是一个可以动态增长和收缩的数组。它基本上相当于一个python列表(除了你只能在其中存储数据类型)。
#include <iostream>
#include <vector>
void foo (std::vector<std::string> vec)
{
// normal for loop
for (int i = 0; i < vec.size (); i++)
{
std::cout << vec[i] << std::endl; // do something
}
std::cout << "#########" << std::endl;
// range based for loop
for (auto val : vec)
{
std::cout << val << std::endl;
}
std::cout << "#########" << std::endl;
}
int main ()
{
foo ({'a', 'b', 'c'});
foo ({'a', 'b', 'c', 'd'});
}
用您需要的数据类型替换std::string
。
生活例子
我建议您使用std::initializer_list
。
函数可以定义如下:
void func(std::initializer_list<std::string> il)
{
for(const std::string & s : il)
{
// ...
}
}
你可以这样使用它:
int main()
{
func({"a", "b", "c"});
return 0;
}
如果这个"[]"样式的括号可以代替"{}"与python类似,且代码最少。
Python和c++是不同的语言和符号,关键字等…有自己的意义。在Python中,[]
表示列表,但在c++中,它是下标操作符(应该是针对给定对象调用的),这是完全不同的事情。