小编Bha*_*wan的帖子

减少std :: map的结尾

这是我的代码:

#include <iostream>
#include <map>
using namespace std;

int main() {
    map<int , int > myMap;

    map<int , int>::iterator it;

    myMap.insert(pair<int , int>(1,2));
    myMap.insert(pair<int , int>(671,223));
    myMap.insert(pair<int , int>(353,245352));

    it = myMap.end() - 1;

    cout << it->first << it->second << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译此代码会产生以下编译错误:

error: no match for ‘operator-’ (operand types are ‘std::map<int, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const int, int> >}’ and ‘int’)
  it = myMap.end() - 1;
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我会收到此错误,因为我认为所有类型的迭代器都允许算术运算.

c++ stl

26
推荐指数
2
解决办法
2793
查看次数

红移上 array_agg() 或 string_agg() 的替代方案

我正在使用此查询来获取汇总结果:

select _bs, string_agg(_wbns, ',') from bag group by 1;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

运行查询时出错:函数 string_agg(字符变化,“未知”)不存在提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

我也试过 array_agg() 并得到同样的错误。

请帮助我找出可用于汇总结果的其他选项。

sql amazon-redshift

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

验证 XML 时 xerces 崩溃

当我尝试使用 Xerces-c 验证 XML 时,我的应用程序有时会崩溃。

这是堆栈跟踪:

#0  0x000000000064ead0 in xercesc_3_2::XMLMutex::lock() ()
#1  0x000000000064eb32 in xercesc_3_2::XMLMutexLock::XMLMutexLock(xercesc_3_2::XMLMutex*) ()
#2  0x00000000005c8d5d in xercesc_3_2::XMLScanner::commonInit() ()
#3  0x00000000005c6ff7 in xercesc_3_2::XMLScanner::XMLScanner(xercesc_3_2::XMLValidator*, xercesc_3_2::GrammarResolver*, xercesc_3_2::MemoryManager*) ()
#4  0x00000000006caf59 in xercesc_3_2::IGXMLScanner::IGXMLScanner(xercesc_3_2::XMLValidator*, xercesc_3_2::GrammarResolver*, xercesc_3_2::MemoryManager*) ()
#5  0x00000000006858aa in xercesc_3_2::XMLScannerResolver::getDefaultScanner(xercesc_3_2::XMLValidator*, xercesc_3_2::GrammarResolver*, xercesc_3_2::MemoryManager*) ()
#6  0x00000000005da3f8 in xercesc_3_2::AbstractDOMParser::initialize() ()
#7  0x00000000005da163 in xercesc_3_2::AbstractDOMParser::AbstractDOMParser(xercesc_3_2::XMLValidator*, xercesc_3_2::MemoryManager*, xercesc_3_2::XMLGrammarPool*) ()
#8  0x00000000005e81bc in xercesc_3_2::XercesDOMParser::XercesDOMParser(xercesc_3_2::XMLValidator*, xercesc_3_2::MemoryManager*, xercesc_3_2::XMLGrammarPool*) ()
#9  0x00000000004f0323 in KEventUtils::validateXML(std::string) (this=0xdbb030, xmlFile="/mnt/lprsResults3//2017/09/18/C01/P00C013-2017091803862.xml.1.xml") at src/KEventUtils.cpp:315
#10 0x00000000004c3861 in ACSTrigger::transcodeVideo(int) (this=0xdbe170, id=0) at src/acsTrigger.cpp:1314
#11 0x00000000004cacaa in …
Run Code Online (Sandbox Code Playgroud)

c++ gdb xerces xerces-c

5
推荐指数
0
解决办法
660
查看次数

java中的局部变量和类变量的行为

我是Java编程语言的新手.
我熟悉C和C++,但无法理解下面程序的行为.

public class Test {
    static int x = 11;
    private int y = 33;
    public void method1(int x) {
        Test t = new Test();
        this.x = 22;
        y = 44;    
        System.out.println("Test.x: " + Test.x);
        System.out.println("t.x: " + t.x);
        System.out.println("t.y: " + t.y);
        System.out.println("y: " + y);
    }    
    public static void main(String args[]) {
        Test t = new Test();
        t.method1(5);
    }
}
Run Code Online (Sandbox Code Playgroud)

正确的输出:

Test.x: 22
t.x: 22
t.y: 33
y: 44
Run Code Online (Sandbox Code Playgroud)

预期产量:

Test.x: 22
t.x: 22
t.y: 44   // …
Run Code Online (Sandbox Code Playgroud)

java static class-level

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

使用awk按行数将行移动到文件中

我有一个带有'|| o ||'的示例文件 作为字段分隔符.

www.google.org||o||srScSG2C5tg=||o||bngwq
farhansingla.it||o||4sQVj09gpls=||o||
ngascash||o||||o||
ms-bronze.com.br||o||||o||
Run Code Online (Sandbox Code Playgroud)

我想移动只有1个字段的行和有1 1.txt个以上字段的行not_1.txt.我使用以下命令:

sed  's/\(||o||\)\+$//g' sample.txt  | awk -F '[|][|]o[|][|]' '{if (NF == 1) print > "1.txt"; else print > "not_1.txt" }'
Run Code Online (Sandbox Code Playgroud)

问题是它不是原始线而是移动线.

我得到的输出是(not_1.txt):

td@the-end.org||o||srScSG2C5tg=||o||bnm
erba01@tiscali.it||o||4sQVj09gpls=
Run Code Online (Sandbox Code Playgroud)

1.TXT:

ngas
ms-inside@bol.com.br
Run Code Online (Sandbox Code Playgroud)

如您所见,原始线条已被修改.我不想修改这些行.任何帮助将受到高度赞赏.

linux bash awk sed

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

弹性搜索中的序列号与版本号

我正在阅读 elasticsearch-7.4 的概念,并且了解了两个领域。 _seq_no_version

根据文档:

版本

Returns a version for each search hit.
Run Code Online (Sandbox Code Playgroud)

序列号和主术语

Returns the sequence number and primary term of the last modification to each search hit.
Run Code Online (Sandbox Code Playgroud)

但它并没有清除与文档的不同或相同时间相关的任何内容。

我创建了一个索引 test

PUT /test/_doc/_mapping
{
  "properties": {
    "total_price" : {
      "type": "integer"
    },
    "final_price": {
      "type": "integer"
    },
    "base_price": {
      "enabled": false
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用PUT API.

PUT /test/_doc/2
{
  "total_price": 10,
  "final_price": 10,
  "base_price": 10
}
Run Code Online (Sandbox Code Playgroud)

无论_seq_no和_version正在增加在这种情况下。

在使用进行部分更新时UPDATE API

POST …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

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

使用C中的双指针在结构数组中进行内存分配

下面是R使用双指针填充struct数组的示例代码.我无法分配内存r[0],并且还当函数退出,都rr[0]0x0.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct R
{
  int x;
  int y;
  char * z;
};

void func(struct R **r)
{
  r = (struct R **) malloc(4 * sizeof(struct R *));
  r[0] = (struct R *) malloc(sizeof(struct R));   // giving r[0] = 0x0
  r[0]->x = 1;
  r[0]->y = 2;
  r[0]->z = (char *) malloc(64 * sizeof(char));
  strcpy(r[0]->z , "HELLO");
}

int main()
{
  struct R *r = NULL; …
Run Code Online (Sandbox Code Playgroud)

c arrays struct pointers

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

从Ruby对象列表中创建列表列表ruby

我有一个像这样的json对象列表:

test = [{"a": 1, "b": 2, "c": 3}, {"a": 4, "b": 5, "c":6}]
Run Code Online (Sandbox Code Playgroud)

我想获取字段'a''c'从上面的测试列表中创建类似这样的列表列表:

[[1, 4], [3, 6]]
Run Code Online (Sandbox Code Playgroud)

这个想法是列出a的所有值,然后列出c的值。

当我使用拨动时:

test.pluck(:a, :c)
Run Code Online (Sandbox Code Playgroud)

我得到这样的输出:

[[1, 3], [4, 6]]
Run Code Online (Sandbox Code Playgroud)

我尝试过的一种方法效果很好。

res = []
res << test.pluck(:a)
res << test.pluck(:c)
Run Code Online (Sandbox Code Playgroud)

但是我认为如果有一个或两个衬垫解决方案(
有或没有)会更好, inbuilt function因为将来的油田数量可能会增加。

ruby ruby-on-rails

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

从矢量C++中删除最后一个元素时的分段错误

我创建了一个简单的C++程序来测试C++向量中erase()的行为.

这是我的代码:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    // your code goes here

    vector<int> vec;

    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);

    cout << vec[0] << " " << vec[1] << " " << vec[2] << endl;

    vec.erase(vec.end());
    //vec.erase(vec.begin());

    cout << vec.size() << endl;

    vec.push_back(12);
    vec.push_back(10);

    cout << vec[0] << " " << vec[1] << " " << vec[2] << endl;


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是上面的代码在尝试擦除向量中的最后一个元素时给出了分段错误.但是当我使用begin()擦除第一个元素时,它工作正常.我无法理解它背后的原因.任何帮助将受到高度赞赏.

c++ stl stdvector

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

在 C++ 中作为字符串添加后打印字符

我想'd'在 C++ 中打印为字符串。

string s = to_string((char)('a'+ 3));

cout << s << endl;
Run Code Online (Sandbox Code Playgroud)

预期输出: "d"

实际输出: "100"

我无法理解这种行为。任何帮助将不胜感激。

c++ string c++14 c++17

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