我有一个字符串数组(长度总是不同的),我需要把它分成几组(数字也不时不同);
int main()
{
// Array that I want to split;
void Names = { Sara, Kaya, Hya, Jenny, Mary, Tiffany, Stefan };
int groupNumber = 3;
//Now I would like to split the names into 3 different groups as evenly as
//possibile so that I can print
// Group 1 : Sara,Hya,Jenny;
//Group 2 : Kaya,Mary;
//Group 3 : Tiffany, Stefan;
}
答案 0 :(得分:0)
这是一个将数组拆分为多个组的示例代码。希望对入门有所帮助。
int groupNumber = 3;
std::vector<std::string> names = { "Sara", "Kaya", "Hya", "Jenny", "Mary", "Tiffany", "Stefan" };
std::vector<std::vector<std::string>> groups;
groups.resize(groupNumber);
for (int i= 0; i < names.size(); ++i)
{
groups.at(i % groupNumber).push_back(names.at(i));
}
您可以使用此循环打印出组。
for (auto group : groups)
{
for (auto name : group)
{
std::cout << name << " , ";
}
std::cout << std::endl;
}
答案 1 :(得分:0)
#include <iostream>
#include <array>
#include <vector>
using std::cout;
template <typename T>
std::ostream& operator <<(std::ostream& stream, const std::vector<T>& vec) {
stream << "{";
for (auto it = vec.begin(); it != vec.end(); ++it) {
if (it != vec.begin()) stream << ", ";
stream << *it;
}
stream << "}";
return stream;
}
template <size_t GroupN, typename T> // T can be deduced
std::array<std::vector<T>, GroupN> split_vector(std::vector<T> vec_to_split) {
std::array<std::vector<T>, GroupN> result;
size_t remaining = vec_to_split.size();
size_t optimal_size;
for (size_t i = 0; i < GroupN; ++i) {
optimal_size = (remaining + GroupN - i - 1) / (GroupN - i);
// ceiling division, 7/3->3, 4/2->2, 2/1->2
result[i].reserve(optimal_size);
for (size_t j = vec_to_split.size() - remaining; j < vec_to_split.size() - remaining + optimal_size; ++j)
result[i].push_back(vec_to_split[j]);
remaining -= optimal_size; // 7-3=4, 4-2=2, 2-2=0
}
return result;
}
int main() {
std::vector<int> v {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
auto [v1, v2, v3] = split_vector<3>(v); // Structured binding, C++17 or above only
cout << v1 << ", " << v2 << ", " << v3 << "\n";
return 0;
}
top 函数只是 std::vector
的一个漂亮的打印机,因为它们默认是不可打印的。我用的是 int
不是 std::string
,但没关系,
main 函数返回一个数组,因此它的大小在编译时作为模板参数给出。