C++ 查找不在索引向量中的索引
如何查找数组中不在索引中的索引?例如,如果索引向量是C++ 查找不在索引向量中的索引,c++,loops,stdvector,C++,Loops,Stdvector,如何查找数组中不在索引中的索引?例如,如果索引向量是(2,8,6,9)。那么结果应该是(1,3,4,5,7)。R在%中有一个函数来执行此操作。一种简单的方法是创建一个标志数组。但在非索引上创建标志和迭代将是两个不同的循环。有没有一种方法可以在单个循环中实现这一点 这应该有效: int j = 0; for(int i = 0;; ++i) { if(oldvec[j] == i) { j++; if(j >= oldvec.length()) break;
(2,8,6,9)
。那么结果应该是(1,3,4,5,7)
。R在%中有一个函数来执行此操作。一种简单的方法是创建一个标志数组。但在非索引上创建标志和迭代将是两个不同的循环。有没有一种方法可以在单个循环中实现这一点 这应该有效:
int j = 0;
for(int i = 0;; ++i) {
if(oldvec[j] == i) {
j++;
if(j >= oldvec.length())
break;
} else {
newvec.push_back[i];
}
}
新答案:
std::set<int> result;
int max = -1;
for(unsigned int i=0; i<oldvec.size(); ++i)
{
int cur = oldvec[i];
while(max < cur) {
max++;
result.insert(max);
}
result.erase(cur);
}
std::设置结果;
int max=-1;
对于(无符号整数i=0;i这应该可以:
int j = 0;
for(int i = 0;; ++i) {
if(oldvec[j] == i) {
j++;
if(j >= oldvec.length())
break;
} else {
newvec.push_back[i];
}
}
新答案:
std::set<int> result;
int max = -1;
for(unsigned int i=0; i<oldvec.size(); ++i)
{
int cur = oldvec[i];
while(max < cur) {
max++;
result.insert(max);
}
result.erase(cur);
}
std::设置结果;
int max=-1;
对于(unsigned int i=0;i首先排序,然后检查“宇宙”中从first
到last
的数字。检查此函数。根据您的示例,输入为A=[2,8,6,9]
,first=1
,last=9
。您可以在out
中获得解决方案。请注意,该函数修改A
以对其进行排序
void getcomplete(标准::向量&A,
第一个尺寸,最后一个尺寸,标准::矢量和输出)
{
out.clear();
如果(最后一次<第一次)返回;
常数大小t=最后一个-第一个+1;
如果((int)T-(int)A.size()>0)out.reserve(T-A.size());
if(A.empty())
{
对于(size_t k=first;k首先排序,然后检查“宇宙”中从first
到last
的数字。检查此函数。根据您的示例,输入为A=[2,8,6,9]
,first=1
,last=9
。您可以在out
中获得解决方案。请注意,该函数修改A
以对其进行排序
void getcomplete(标准::向量&A,
第一个尺寸,最后一个尺寸,标准::矢量和输出)
{
out.clear();
如果(最后一次<第一次)返回;
常数大小t=最后一个-第一个+1;
如果((int)T-(int)A.size()>0)out.reserve(T-A.size());
if(A.empty())
{
对于(大小k=first;k无排序:
#include <iostream>
#include <vector>
struct NaturalNumber {
unsigned value;
bool valid;
NaturalNumber(unsigned value = 0)
: value(value), valid(true)
{}
};
typedef std::vector<NaturalNumber> NaturalNumbers;
NaturalNumbers natural_number_range(unsigned n) {
NaturalNumbers result;
result.resize(n);
for(unsigned i = 0; i < n; ++i) result[i] = i;
return result;
}
int main(int argc, char* argv[]) {
NaturalNumbers n0 = { 2, 8, 6, 9 };
NaturalNumbers n1 = natural_number_range(10);
for(NaturalNumbers::const_iterator pos = n0.begin(); pos != n0.end(); ++pos) {
n1[pos->value].valid = false;
}
for(NaturalNumbers::const_iterator pos = n1.begin(); pos != n1.end(); ++pos) {
if(pos->valid)
std::cout << pos->value << std::endl;
}
return 0;
}
#包括
#包括
结构自然数{
无符号值;
布尔有效;
自然数(无符号值=0)
:值(value),有效(true)
{}
};
typedef std::向量自然数;
自然数自然数范围(无符号n){
自然数结果;
结果:调整大小(n);
对于(无符号i=0;ivalue].valid=false;
}
for(自然数::常量迭代器pos=n1.begin();pos!=n1.end();++pos){
如果(pos->valid)
std::cout值无需排序:
#include <iostream>
#include <vector>
struct NaturalNumber {
unsigned value;
bool valid;
NaturalNumber(unsigned value = 0)
: value(value), valid(true)
{}
};
typedef std::vector<NaturalNumber> NaturalNumbers;
NaturalNumbers natural_number_range(unsigned n) {
NaturalNumbers result;
result.resize(n);
for(unsigned i = 0; i < n; ++i) result[i] = i;
return result;
}
int main(int argc, char* argv[]) {
NaturalNumbers n0 = { 2, 8, 6, 9 };
NaturalNumbers n1 = natural_number_range(10);
for(NaturalNumbers::const_iterator pos = n0.begin(); pos != n0.end(); ++pos) {
n1[pos->value].valid = false;
}
for(NaturalNumbers::const_iterator pos = n1.begin(); pos != n1.end(); ++pos) {
if(pos->valid)
std::cout << pos->value << std::endl;
}
return 0;
}
#包括
#包括
结构自然数{
无符号值;
布尔有效;
自然数(无符号值=0)
:值(value),有效(true)
{}
};
typedef std::向量自然数;
自然数自然数范围(无符号n){
自然数结果;
结果:调整大小(n);
对于(无符号i=0;ivalue].valid=false;
}
for(自然数::常量迭代器pos=n1.begin();pos!=n1.end();++pos){
如果(pos->valid)
std::cout value是已知的最大值?我不理解这个问题。也许你可以用代码更好地解释一下?你应该能够使用std::set_difference()
从
如果从1开始indexig,则认为它是错误的。最小值已知吗?最大值已知吗?我不理解这个问题。也许你可以用代码更好地解释一下?你应该能够使用std::set_difference()
从
如果从1开始indexig,则持有错误。已知最小值吗?如果未对oldvec
进行排序,则此操作将失败。是的,我假设它已排序,但示例未排序。好的一点。因此:对该对象进行排序,它将是answer@DieterL这可不算是一个循环(imho.)@DieterLücking排序将在O(nlog(n)):)中进行。如果未对oldvec
进行排序,则此操作将失败。是的,我假设它已排序,但示例未排序。好的一点。因此:对该对象进行排序,它将是answer@DieterL这不算是一个循环,imho.:@DieterLücking排序将在O(nlog(n))中进行