【发布时间】:2020-12-13 23:12:38
【问题描述】:
我有这个数组:
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;
}
}
如何移动元素?
【问题讨论】:
-
“它不工作”的信息远没有你想象的那么丰富。它是编译、链接、运行、崩溃,还是只是不做你期望的事情?它会改变一些元素而不是全部吗?请edit您的问题提供更多信息。
-
std::stable_partition(std::begin(langs), std::end(langs), [&](const std::string& elem) { return elem != k;} ); -
remove_ifshould do the job。并且完全搞砸了必须进行代码维护的人的大脑。 -
@user4581301
remove_if可能会产生类似{ "C++", "Haskell", "Python", "", "Ada" }的内容。它确实将未删除的元素向前移动,但它不将已删除的元素移动到末尾;序列的尾部留下未指定的内容 - 例如未修改的原始值,或移出的对象。 -
很高兴知道。我会缓冲的。