python风格的c++函数列表输入



我想有一个类似于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++中,它是下标操作符(应该是针对给定对象调用的),这是完全不同的事情。

相关内容

  • 没有找到相关文章

最新更新