当前位置: 首页 > 知识库问答 >
问题:

C++集输出的元素比它包含的要多得多

左丘宜然
2023-03-14

我有一个非常大的字符串集,我想找到唯一字符串的子集,我使用集容器。这些方法转到MySQL数据库,拉入一组新的字符串,并尝试将它们添加到集合中。我检查从insert返回的信息,以确定是否添加了字符串(第一次出现),或者它已经存在。

#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>
#include <vector>
#include <iostream>

#include "CDR3Sample.h"
#include "MySQLConnect.h"

using namespace std;

int main() {

    CDR3SetReturn ret;
    //CDR3Set is a typedef on set<string>
    CDR3Set total;

    try
    {
            MySQLConnect connection;
            cerr << "size of master " << connection.getMasterSize() << endl;

            SampleIDList list = connection.getSampleIDList();
            SampleIDList ids_seen;
            cerr << "size of raw ID list " << list.size() << endl;


            for (SampleIDListIterator it=list.begin(); it != list.end(); it++) {
                    // We're going to skip it if the table doesn't exist or if the sample has already been processed
                if (connection.checkTable(*it) && find(ids_seen.begin(), ids_seen.end(), *it)!=list.end()) {
            CDR3Sample s(*it, connection);
            int valid_number = 0;
            for (CDR3SetIterator sit=s.begin(); sit != s.end(); sit++) {
                ret = total.insert(*sit);
                if (ret.second) {
                    valid_number++;
                }
            }
            cout << *it << " " << s.getLength() << " " << valid_number << " " << total.size() << endl;
            ids_seen.push_back(*it);
                } else {
                    cerr << *it << " table not found" << endl;
                }
            }
    }
    catch (int i)
    {
            // Need to put code here to save state of calculation
        std::cerr << "Exception thrown by MySQLConnect " << i << std::endl;

        exit(-1);
    }

    // Need to put code here to save state of calculation
    cerr << "size of total " << total.size() << endl;
    ofstream ofs ("cdr3_tally.test", ifstream::out);
    int it_count=0;
    while (ofs.good()) {
        for (CDR3SetIterator it=total.begin(); it != total.end(); ++it) {
            cout << it_count << " " << *it  << endl;
            it_count++;
        }
    }
    ofs.close();
    cerr << "it_count " << it_count << endl;

    ofs_naive.close();


    return 0;
}

为了简洁起见,我将省略支持代码,但我可以提供它。

size of master 9243
size of raw ID list 1
~MySQLConnect
size of total 372

我在ubuntu上使用G++

$g++-v使用内置规范。collect_gcc=g++collect_lto_wrapper=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper目标:x86_64-linux-gnu配置有:../src/configure-v--with-pkgversion='Ubuntu 4.8.1-2Ubuntu1~12.04'--with-bugurl=file:///usr/share/doc/gcc-4.8/readme.bugs--enable-languages=C,C++,java,go,d,fortran,OBJ-C++--prefix=/usr-program-suffix=-4.8--enable-shared--enable-linker-build-id--libexecdir=/usr/lib-++/4.8--libdir=/usr/lib--enable-nls--with-sysroot=/--enable-clocale=gnu--enable-libstdcxx-debug--enable-libstdcxx-time=yes-enable-gnu-unique-object--enable-plugin-with-system-zlib-disable-browser-plugin-with-system-zlib-disable-browser-plugin-enable-java-awt=gtk-enable-gtk-cairo root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64--with-arch-directory=amd64--with-ecj-jar=/usr/share/java/eclipse-ecj.jar--enable-objc-gc--enable-multiarch--disable-werror--with-arch-32=i686--with-abi=m64--with-multilib-list=m32,m64--with-tune=generic--enable-checking=release-build=x86_64-linux-gnu--host=x86_64-linux-gnu--target=x86_64-linux-gnu线程模型:posix gcc Version4.8.1(Ubuntu4.8.1-2Ubuntu1~12.04)

谢谢

迈克

共有1个答案

鄢禄
2023-03-14

您的coutfor循环包含在while(ofs.good())中。for循环中的任何内容都不会使它变坏,所以它一直在集合上循环,并一次又一次地打印所有内容。

 类似资料:
  • 本文向大家介绍如何获得包含每个匹配元素集的所有唯一直接子元素的元素集?,包括了如何获得包含每个匹配元素集的所有唯一直接子元素的元素集?的使用技巧和注意事项,需要的朋友参考一下 children([selector])方法获取一组元素,其中包含每个匹配元素集的所有唯一直接子代。 示例 您可以尝试运行以下代码,以了解如何获取包含每个匹配元素集的所有唯一立即子元素的元素集:

  • 我要求用户在控制台写四个数字,每个数字用连字符分隔。然后我将它们拆分,这将自动创建一个列表,并将其转换为int。但我不知道用户输入了多少数字。 如何检查if方法中这个列表包含多少元素?我需要这样的东西: 我不需要建议来重建我的代码,我需要知道我是否可以检查它或不。

  • 以下是更详细的错误消息: 我将代码中的问题隔离在下面的某个地方,尽管我不知道抛出这个异常的具体原因: gradle.build-项目

  • 本文向大家介绍C#中获取BitArray中包含的元素数量,包括了C#中获取BitArray中包含的元素数量的使用技巧和注意事项,需要的朋友参考一下 要获取BitArray中包含的元素数量,代码如下- 示例 输出结果 这将产生以下输出- 示例 现在让我们来看另一个示例- 输出结果 这将产生以下输出-

  • 问题内容: 我正在重写我的一个Android应用程序以利用NDK,并且它每次要做的第一件事之一是打开一个1.5MB的文本文件(大约15万行),并将每一行放入数据中结构体。当我使用Java的BufferedReader.readLine()进行此操作时,从SD卡读取文件大约需要2.5秒。这是我用于此的代码: 将C 与ifstream一起使用需要更长的时间…对于同一文件大约需要3分钟。这是我在C 中使

  • 当我在一次编码竞赛中解决一个问题时,我发现我需要这样做:给定表示子数组索引的对对于每个元素,计算包含它的子数组的数量。例如: 我们有一个数组<code>[7,-2,-7,0,6],对是<code<(0,2)、(1,4)、(2,3)、(0,3)</code>,那么结果数组将是<code>[2,3,4,3,1],因为第一个元素在子数组<code>(0,2),</code>(0,3)中,第二个元素在<c