小编Ete*_*ner的帖子

O(log n)算法用于找到具有排序i的元素与预排序列表的并集

给定两个排序列表,每个包含n个实数,是否有一个O(log n)时间算法来计算两个列表的并集中排名i的元素(其中i对应于递增顺序的索引),假设元素为这两个清单是截然不同的?

编辑:@BEN:这就是我一直在做的事情,但我仍然没有得到它.

我有一个例子;

列表A:1,3,5,7列表B:2,4,6,8

找到等级(i)= 4.

第一步:i/2 = 2; 列表A现在包含的是A:1,3列表B现在包含的是B:2,4

         compare A[i] to B[i] i.e 

                 A[i] is less;

                 So the lists now become :

                   A: 3 
                   B: 2,4
Run Code Online (Sandbox Code Playgroud)

第二步:i/2 = 1

         List A now contains A:3
         List B now contains B:2 

         NoW I HAVE LOST THE VALUE 4 which is actually the result ...
Run Code Online (Sandbox Code Playgroud)

我知道我错过了一些东西,但即使在接近一天的思考之后,我也无法想到这一点......

c++ algorithm

7
推荐指数
1
解决办法
2228
查看次数

如何查找参数包的长度?

假设我有一个可变参数模板函数

template<typename... Args>
unsigned length(Args... args);
Run Code Online (Sandbox Code Playgroud)

如何使用长度函数找到参数列表的长度?

c++ templates variadic variadic-functions c++11

6
推荐指数
1
解决办法
1635
查看次数

如何在"system"命令中包含字符串变量(char*) - linux

char*S ="你好"; //假设它是动态分配的

当S被视为具有值"hello"的字符串时,我想在下面的语句中使用S.

system("grep S searchtext.txt> result.txt");

我该怎么做呢?

c linux grep

6
推荐指数
2
解决办法
3831
查看次数

在程序中一起使用getline和strtok的问题

在下面的程序中,我打算将文件中的每一行读成一个字符串,分解字符串并显示单个单词.我面临的问题是,程序现在只输出文件中的第一行.我不明白为什么会这样?

#include<iostream>
#include<string>
#include<fstream>
#include<cstdio>
using namespace std;

int main()
{
    ifstream InputFile("hello.txt") ;
    string store ;
    char * token;

    while(getline(InputFile,store))
    {
        cout<<as<<endl;
        token = strtok(&store[0]," ");
        cout<<token;
        while(token!=NULL)
        {
        token = strtok(NULL," ");
        cout<<token<<" ";
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

c++ string tokenize strtok

5
推荐指数
1
解决办法
2732
查看次数

如何创建实现java.util.collections的类

我正在尝试创建一个类MyStack,表示将实现java.util.collections类.MyStack将覆盖集合类的一些方法,如add(类似于push),remove(类似于pop)等.我打算将类建模在Set与集合类的一个或其他接口相同的行上,除非它MyStack不是一个接口或抽象类,我们可以创建类型的对象MyStack.

我的语法有问题,因为我不确定我是否正在朝着正确的方向前进.到目前为止我所有的都是这样的 - 注意 - 到目前为止还没有定义任何方法 - 我试图让骨架正确在继续定义方法之前.

import java.util.*;


public class MyStak implements java.util.Collection<E>{

    public boolean add(E o){

               return false;        
        }

       public boolean addAll(Collection c){
        return false; 

        }

       public void clear() {

       }

        public boolean contains(Object o){
          return false;

        }

        public boolean containsAll(Collection o){
          return false;

        }

        public boolean equals(Object c){
          return false; 
        }

        public int hashcode(){
          return 0; 
        }

        public boolean isEmpty(){
          return false; 
        }

        public Iterator iterator(){ …
Run Code Online (Sandbox Code Playgroud)

java collections

5
推荐指数
1
解决办法
2万
查看次数

在释放内存的同时堆积腐败

我有一个课程如下

 struct CliHandler {
     CliHandler(int argc, char** argv);
     ~CliHandler();

     int doWork();

     int argc_; 
     char** argv_;  
     private:
     CliHandler(const CliHandler&){}
     CliHandler& operator=(const CliHandler&){} 
 };
Run Code Online (Sandbox Code Playgroud)

//构造函数

 CliHandler::CliHandler(int argc,
 char** argv) {
     //set command line parameters
     argc_ = argc; 

     argv_ = (char**) malloc(argc_ * sizeof(char*));

     for(int i=0; i<argc_; ++i)
     {
         std::cout<<sizeof(argv[i]); 
         argv_[i] = (char*) malloc(strlen(argv[i]) *
 sizeof(char));
         StrCpy(argv_[i], argv[i]);
     } }
Run Code Online (Sandbox Code Playgroud)

//析构函数

 CliHandler::~CliHandler() {
     for(int i=0; i<argc_; ++i)
         free(argv_[i]); 
     free(argv_);  }
Run Code Online (Sandbox Code Playgroud)

当我调试时,我收到一个错误"检测到堆损坏.CRT检测到应用程序在堆缓冲区结束后写入内存."我的问题ID"我到底在哪里犯了错误?如何修复它".我正在使用visual stdio 2008.

编辑:我做了类似这样的事情来添加1

argv_ [i] =(char*)malloc(strlen(argv [i] + 1)*sizeof(char));

这是可怕的,因为它将指针argv [i]递增1.我的同事指出了微妙的问题.它应该是

argv_ …

c++ malloc free heap-corruption

5
推荐指数
1
解决办法
1万
查看次数

在排除简单的提升线程程序时出错

你能告诉我下面的boost :: thread程序有什么问题吗?

#include<iostream>
#include<boost/thread/thread.hpp>

boost::mutex mutex;

class A
{
public:
A() : a(0) {}

void operator()()
{
          boost::mutex::scoped_lock lock(mutex);

}
private:
int a;
Run Code Online (Sandbox Code Playgroud)

};

int main()
{
    boost::thread thr1(A());
    boost::thread thr2(A());
    thr1.join();
    thr2.join();
Run Code Online (Sandbox Code Playgroud)

}

我收到错误消息:错误:请求'thr1'中的成员'join',这是非类型类型'boost :: thread()(A()())'BoostThread2.cpp:30:错误:请求对于'thr2'中的成员'join',它是非类型的'boost :: thread()(A()())'

c++ boost-thread

4
推荐指数
2
解决办法
677
查看次数

使用正则表达式 Grep 指定要搜索的文件名的多个文件

假设我有n一些名称为link123.txtlink345.txtlink645.txt等的文件。

我想 grep 这些n文件的子集来查找关键字。例如:

grep 'searchtext' link123.txt link 345.txt ...
Run Code Online (Sandbox Code Playgroud)

我想做类似的事情

grep 'searchtext' link[123\|345].txt
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我如何将文件名作为正则表达式提及?

regex linux bash grep

4
推荐指数
1
解决办法
1万
查看次数

C:如何将一串int转换为实际的int并将它们存储在一个数组中?

我有一个字符串"14 22 33 48".我需要将字符串中的每个值插入到数组中的相应位置:

int matrix[5];
Run Code Online (Sandbox Code Playgroud)

以便

matrix[0] = 14;
matrix[1] = 22;
matrix[2] = 33;
matrix[3] = 48;
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

c string

3
推荐指数
2
解决办法
2766
查看次数

memcpy和copy之间的区别

Struct A
{
   uint16_t len;
   uint8_t  cnt;
   uint8_t  unit;
   uint32_t seq; 
};
Run Code Online (Sandbox Code Playgroud)

这个结构A被序列化为一个char *buf.如果我想反序列化各个值,例如:

uint16_t len = 0;
memcpy(&len, buf, sizeof(len));
Run Code Online (Sandbox Code Playgroud)

或者我可以做

uint16_t len = (uint16_t) buf;
Run Code Online (Sandbox Code Playgroud)

哪一个更好或者两者都相同?

如果我这样做的话,也要对整个结构进行反序列化

A tmp;

memcpy(&tmp, buf, sizeof(A));
Run Code Online (Sandbox Code Playgroud)

这工作正常还是我应该担心编译器的填充等?

c c++ memcpy

3
推荐指数
1
解决办法
273
查看次数