我想要一個類似于 python 的函式的輸入,這樣我就可以在函式內部回圈它。但我不確定我應該如何定義輸入。
func(["a","b","c"])
所以它也可以被稱為
func(["a","b","c", "d"])
C 中真的有這種輸入風格嗎?如果有人還建議一種回圈方式,我會很高興,因為我的 C 經驗非常基礎。
- - - -編輯,
如果可以使用這種“[]”樣式的括號代替“{}”,類似于 python 并且代碼最少,那將會很高興。
uj5u.com熱心網友回復:
是的,您可以使用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。
uj5u.com熱心網友回復:
您可以使用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>. 您也可以考慮簡單地將 a 傳遞std::string給函式 ( foo("abc"))。
如果可以使用這種“[]”樣式的括號代替“{}”,類似于 python 并且代碼最少,那將會很高興。
更好地習慣不同的語言是不同的。試圖讓一種語言的代碼看起來像另一種語言通常不會有回報,因為不僅在細節上 python 和 C 非常不同。
uj5u.com熱心網友回復:
其他答案會起作用,但我認為您正在尋找std::vector,這是一個可以動態增長和縮小的陣列。它基本上是等效于python串列的c (除了您只能存盤其中的資料型別)。
#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為您需要的資料型別。
活生生的例子
uj5u.com熱心網友回復:
我建議您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 中,它是下標運算子(應該為給定物件呼叫),這是完全不同的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331754.html
上一篇:C 中帶有C結構的malloc
