对不起,愚蠢的问题。我正在尝试在C ++中创建并通过常量对列表,但到目前为止在Google上找不到任何内容。理想情况下,我在for语句中也获得了第一个元素和第二个元素。
我到目前为止有:
for (auto& tup : std::tuple<char*, char*> { {"", ""}, {"abc", "cba"}, {"abcd", "dcba"} }) {
}
在python中,它非常简单,我可以做(甚至不需要方括号):
for tup in [('', ''), ('abc', 'cba'), ('abcd', 'dcba')]:
pass
有什么想法吗?
答案 0 :(得分:4)
首先,不允许将字符串文字分配给char*
,因此无论如何都应使用const char*
。 std::string_view
可能更好。
使用std::tuple<char*, char*> { {"", ""}, {"abc", "cba"}, {"abcd", "dcba"} }
,您正在尝试使用std::tuple<char*, char*>
的初始值设定项列表构造单 std::tuple<char*, char*>
。
如果您只想查看std::tuple
的列表,则可以重复手动列出类型:
for (auto&& tup : { std::tuple<const char*, const char*>{"", ""},
std::tuple<const char*, const char*>{"abc", "cba"},
std::tuple<const char*, const char*>{"abcd", "dcba"} }) {
/* ... */
}
基本上在其中创建std::initializer_list<std::tuple<char*, char*>>
并通过它的地方。如果您觉得这太丑陋,也可以只指定一次类型:
for (auto&& x : std::initializer_list<std::tuple<const char*, const char*>>
{
{"a1", "a2"},
{"b1", "b2"}
}
) { /* ... */ }
答案 1 :(得分:2)
您可以使用std::initializer_list
:
for (auto& tup : std::initializer_list<std::tuple<const char*, const char*>> { {"", ""}, {"abc", "cba"}, {"abcd", "dcba"} })
{
std::cout << std::get<0>(tup) << ", " << std::get<1>(tup) << std::endl;
}
我不得不说,这很难看。
答案 2 :(得分:2)
这应该没有那么复杂,只需创建一个元组数组即可。
并确保它们是const char*
而不是char*
:
#include <iostream>
#include <tuple>
int main() {
std::pair<const char*, const char*> a[] = { {"", ""}, {"abc", "cba"}, {"abcd", "dcba"} };
for (auto& tup : a) {
std::cout << std::get<0>(tup) << " " << std::get<1>(tup);
}
return 0;
}
答案 3 :(得分:1)
只需在以下位置创建一个临时数组:
std::tuple<const char*, const char*> tmp[]={ {"", ""}, {"abc", "cba"}, {"abcd", "dcba"} };
for (const auto& tup : tmp) {
}
请注意,它们必须为const char*
,而不是char*
。
答案 4 :(得分:0)
如果在代码中多个地方需要元组列表,请分别创建它:
constexpr std::tuple<std::string_view, std::string_view> the_list[] = {
{"", ""}, {"abc", "cba"}, {"abcd", "dcba"}
};
然后使用它会很简单:
for (auto& [one,two] : the_list) {
std::cout << one << " , " << two << "\n";
}
如果仅要在一个循环中使用它,则可以直接使用初始化列表:
for (auto& [one,two] : std::initializer_list<std::tuple<std::string_view, std::string_view>>
{
{"", ""}, {"abc", "cba"}, {"abcd", "dcba"}
}
) {
std::cout << one << " , " << two << "\n";
}