小编blu*_*lue的帖子

C++ std :: map <std :: string,int>获取其键以特定字符串开头的值

我正在以这种方式使用std :: map:

#include <map>
#include <string>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
    map<string, int> my_map;

    my_map.insert(pair<string, int>("Ab", 1));
    my_map.insert(pair<string, int>("Abb", 2));
    my_map.insert(pair<string, int>("Abc", 3));
    my_map.insert(pair<string, int>("Abd", 4));
    my_map.insert(pair<string, int>("Ac", 5));
    my_map.insert(pair<string, int>("Ad", 5));

    cout<<my_map.lower_bound("Ab")->second<<endl;
    cout<<my_map.upper_bound("Ab")->second<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/5YPQmj

我想获得其键以特定字符串开头的所有值(例如"Ab").我可以使用map :: lower_bound轻松获取begin迭代器.但是我怎样才能获得上限?我是否必须从下限开始迭代整个集合并检查每个键是否仍然以"Ab"开头?

c++ map

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

为什么这个简单的lambda在std :: thread内的运行速度比在gcc 4.9.2的main函数内运行得快?

以下代码段采用命令行参数,该参数表示要生成的线程数以同时运行简单的for循环.

如果传递的参数为0,则不会std::thread生成.

在gcc 4.9.2上,./snippet 0./snippet 1平均值长10%,即产生一个std::thread执行循环的版本比刚刚执行循环的版本更快main.

有谁知道发生了什么?clang-4根本没有显示这种行为(版本只有一个std::thread较慢),gcc 6.2的版本只有一个std::thread运行速度稍快一些(当花费十多次试验的最小时间作为测量值时).

这是片段:ScopedNanoTimer只是一个简单的RAII计时器.我正在编译-g -O3 -pthread -std=c++11.

#include <thread>
#include <vector>

int main(int argc, char** argv) {

   // setup
   if (argc < 2)
      return 1;
   const unsigned n_threads = std::atoi(argv[1]);
   const auto n_iterations = 1000000000ul / (n_threads > 0u ? n_threads : n_threads + 1);

   // define workload
   auto task = [n_iterations]() {
      volatile auto sum = …
Run Code Online (Sandbox Code Playgroud)

c++ lambda multithreading gcc c++11

8
推荐指数
1
解决办法
306
查看次数

c ++中的extern const

我有一个名为abc.h的头文件,其中我想用外部链接定义一个常量.因此它包含声明

--------------- abc.h -------------------------

extern const int ONE = 1;
Run Code Online (Sandbox Code Playgroud)

接下来,我有main.cpp,我想使用ONE的值.因此我在使用它之前在main.cpp中声明了ONE

--------------- main.cpp中---------------------

extern const int ONE;
int main()
{
     cout << ONE << endl;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误"ONE的多个定义".

我的问题是,如何使用外部链接声明一个const,并在随后的不同文件中使用它,这样常量只有一个内存位置,而不是每个包含常量静态版本的文件.


我从main.cpp中删除了#include"abc.h",一切正常.

g ++ abc.h main.cpp -o main

ONE的地址在标题和主要内容中相同.所以它有效.

但我不明白编译器如何在main.cpp中解析ONE而不包含include语句的定义

似乎g ++做了一些魔术.这是一个不好的做法,main.cpp的读者不知道ONE声明在哪里,因为main.cpp中没有包含"abc.h"?

c++

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

链接时奇怪的未定义引用

我在以下几行代码中重现了我在一个更大的项目中所经历的行为.我遗漏了#ifndef警卫和#include指令,试图提高可读性.调用时会生成链接器错误make.makefile包含在问题的末尾.

C类继承自B的继承自A的O.O是完全不同的类.

链接器抱怨:

g++ -o main main.cpp -L. -lABC -lO
./libO.a(O.o): In function `O::foo(A)':
O.cpp:(.text+0x1f): undefined reference to `C::C(A const&)'
Run Code Online (Sandbox Code Playgroud)

这是源代码.我试图让它尽可能小和可读.知道问题是什么?

/***** A.h *****/
class A
{
    public:
    A();
    A(const A& a);
};

/***** A.cpp *****/
A::A() {}
A::A(const A& a) {}

/****** BC.h *******/
class B : public A
{
    public:
    B(const A& a);
};

class C :  public B 
{
    public:
    C(const A& a);
};

/******* BC.cpp ********/
B::B(const A& a) : …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance linker-errors

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

如何使用正则表达式在字符串中定义分隔符?

我想要一个字符串,它必须在括号中()并用逗号分隔,,例如:(aaa),(bbbb),(cccccccc)

我怎么能用正则表达式匹配呢?

regex

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

以c ++方式格式化文本

我正在尝试创建一个可以格式化我的文本输出的c ++函数,如下所示:

#0 id:80

#1 id:80

#2 id:80

#3 id:80

等等...

并在函数中有一个名为max的参数来限制输出量,例如:

如果max参数设置为10,则大多数打印/输出仅10次:

#0 id:80

#1 id:80

#2 id:80

#3 id:80

#4 id:80

#5 id:80

#6 id:80

#7 id:80

#8 id:80

#9 id:80

#10 id:80

我试图做的是下面的代码,但它不能按我的意愿工作:

void format_text(int max){

char Buffer[100];

static int amount;

for (int x = 0; x <= max; x++){

amount ++;

if (max > amount){

length += sprintf(Buffer+length,"#%d id: %d\n", amount, 80);

printf("%s", Buffer);

}
Run Code Online (Sandbox Code Playgroud)

请帮我制作一个我为你描述的功能

c++

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

标签 统计

c++ ×5

c++11 ×1

gcc ×1

inheritance ×1

lambda ×1

linker-errors ×1

map ×1

multithreading ×1

regex ×1