Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找不在索引向量中的索引_C++_Loops_Stdvector - Fatal编程技术网

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))中进行