我如何组合
string test[8];
test[3] = "Bar";
test[7] = "Foo";
单一声明?
也许类似于string test[8] = {3: "Bar", 7: "Foo"};
?
答案 0 :(得分:4)
你是std::array
的粉丝吗?然后你可以做这样的事情:
#include <array>
#include <initializer_list>
#include <iostream>
#include <string>
template<typename T, unsigned n>
std::array<T, n> sparse_array(std::initializer_list<std::pair<unsigned, T>> inits)
{
std::array<T, n> result;
for (auto&& p : inits)
{
result[p.first] = std::move(p.second);
}
return result;
}
int main()
{
auto test = sparse_array<std::string, 8>({
{3, "Bar"},
{7, "Foo"}
});
std::cout << test[7] << test[3] << '\n';
}
虽然我并不认为额外的复杂性是值得的。
答案 1 :(得分:1)
你不能。如果你想专门使用一个数组,你只需要声明一个比你需要的更大的数组。您可以手动分配更多数据,但您可能需要其他一些数据结构。
string test[8];
test[3] = "Bar";
test[7] = "Foo";
你也可以做一张地图:
#include <iostream>
#include <map>
using namespace std;
int main(int argc, char *argv[]) {
map<int,string> aMap;
aMap[3] = "Bar";
aMap[7] = "Foo";
}
答案 2 :(得分:0)
你要做的事情是如此危险。想象一下你想要的东西:
string test[];//this is not valid the
test[3] = "Bar";
test[99999] = "Foo";
由于数组是结果数据,它会在内存中分配(99999 + 1)项,这绝对不是正确的方法。
您可以使用map:
std::map<std::size_t,std::string> test;
test[3] = "Bar";
test[7] = "Foo";
在这种情况下,内存中只分配了两个pair
项。
如果您需要静态分配,可以使用:
std::array<std::pair<std::size_t,string>,2> test={{3,"Bar"},{7,"Foo"}};
请参阅@fredoverflow解决方案,它可以很好地处理您的数组。