如何将元素移动到数组的末尾
How to shift elements to end of the array
我有这个数组:
std::string langs[] = { "C++", "Ada", "Haskell", "Python", "Ada" };
我想写一个函数把K个元素移到最后例如:
k="Ada";
{ "C++", "Haskell", "Python", "Ada", "Ada" };
我写了这个但它不起作用:
void moved(T e)
{
istd::vector<int> indexes;
for (int i = 0; i < size_array; ++i)
{
if (array[i] == e)
{
indexes.push_back(i);
}
}
for (int j = 0; j < (int)indexes.size(); ++j)
{
T temp=e;
for (int i = indexes[j]; i < deleted_array_size-1; ++i)
{
array[i] = array[i + 1];
std::cout << i << std::endl;
}
deleted_array_size--;
array[deleted_array_size - 1] = temp;
}
}
如何移动元素?
如果顺序无关紧要,您可以使用 std::partition
:
int main()
{
std::string langs[] = { "C++", "Ada", "Haskell", "Python", "Ada" };
std::partition(std::begin(langs), std::end(langs), [](auto& lang) {
return lang != "Ada";
});
for (auto& str : langs) {
std::cout << str << std::endl;
}
}
打印:
C++
Python
Haskell
Ada
Ada
如果排序 重要,您可以使用 std::stable_partition
。
我有这个数组:
std::string langs[] = { "C++", "Ada", "Haskell", "Python", "Ada" };
我想写一个函数把K个元素移到最后例如:
k="Ada";
{ "C++", "Haskell", "Python", "Ada", "Ada" };
我写了这个但它不起作用:
void moved(T e)
{
istd::vector<int> indexes;
for (int i = 0; i < size_array; ++i)
{
if (array[i] == e)
{
indexes.push_back(i);
}
}
for (int j = 0; j < (int)indexes.size(); ++j)
{
T temp=e;
for (int i = indexes[j]; i < deleted_array_size-1; ++i)
{
array[i] = array[i + 1];
std::cout << i << std::endl;
}
deleted_array_size--;
array[deleted_array_size - 1] = temp;
}
}
如何移动元素?
如果顺序无关紧要,您可以使用 std::partition
:
int main()
{
std::string langs[] = { "C++", "Ada", "Haskell", "Python", "Ada" };
std::partition(std::begin(langs), std::end(langs), [](auto& lang) {
return lang != "Ada";
});
for (auto& str : langs) {
std::cout << str << std::endl;
}
}
打印:
C++
Python
Haskell
Ada
Ada
如果排序 重要,您可以使用 std::stable_partition
。