小编Fai*_*per的帖子

取消引用字符串向量的.end()时的行为

我想知道,如果它是"安全的"设置string等于无论是通过取消引用现成的,最终返回iteratorvectorstring秒.当我运行程序时

#include <vector>
#include <string>

int main()
{

    std::vector<std::string> myVec;
    std::cout << *myVec.end();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

/usr/local/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/debug/safe_iterator.h:181:
    error: attempt to dereference a past-the-end iterator.

Objects involved in the operation:
iterator "this" @ 0x0xffdb6088 {
type = N11__gnu_debug14_Safe_iteratorIN9__gnu_cxx17__normal_iteratorIPSsN10__gnu_norm6vectorISsSaISsEEEEEN15__gnu_debug_def6vectorISsS6_EEEE (mutable iterator);
  state = past-the-end;
  references sequence with type `N15__gnu_debug_def6vectorISsSaISsEEE' @ 0x0xffdb6088
}

Disallowed system call: SYS_kill
Run Code Online (Sandbox Code Playgroud)

您可以在http://codepad.org/fJA2yM30上查看

我想知道这一切的原因是因为我的代码中有一个片段就像是

std::vector<const std::string>::iterator iter(substrings.begin()), offend(substrings.end());
while (true)
{
    this_string = *iter;
    if (_programParams.count(this_string) > …
Run Code Online (Sandbox Code Playgroud)

c++

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

良好的C++解决方案"将所有的零带到阵列的后面"采访挑战

我接受了Jr.开发工作的采访,他让我写了一个程序,它采取一系列的整数并将零推到后面.以下是约束(他在开始时没有告诉我......正如在编程访谈中经常发生的那样,我在解决问题的过程中学会了问题的约束)

  • 必须就地做; 没有创建临时数组,新数组等
  • 不必保留非零数字的顺序(我希望他在开始时告诉我这个)

建立:

int arr[] = {0, -2, 4, 0, 19, 69}; 
/* Transform arr to {-2, 4, 19, 69, 0, 0} or {69, 4, -2, 19, 0, 0} 
   or anything that pushes all the nonzeros to the back and keeps
   all the nonzeros in front */
Run Code Online (Sandbox Code Playgroud)

我的答案:

bool f (int a, int b) {return a == 0;}
std::sort(arr, arr+sizeof(arr)/sizeof(int), f);
Run Code Online (Sandbox Code Playgroud)

还有什么其他好的答案?

c++ algorithm

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

GitHub错误"无法获取HEAD"

我是GitHub的新手,主要是用它来备份服务和炫耀代码.无论如何,我正试图让我的最新程序在那里,当我试图推动时,我在这个线程的标题中得到错误.

Repro步骤:

  • 坐在星巴克与蹩脚的wifi(这可能与问题有关吗?严重的问题.)
  • 打开最新版本的GitHub以获取最新的Macintosh操作系统
  • 文件 - >新存储库
  • 本地路径 - >包含我的XCode项目的文件夹
  • 名称 - >给它起个名字
  • 发布
  • 同步
  • 推....获取错误
  • 查看我的XCode项目的文件夹,它看起来像一个空的子文件夹,其中创建了我的GitHub项目的名称.咦?

macos github

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

如何使用const_iterator来编译更高效的程序?

据我所知,使用const&所有其他花哨的C++东西,正如我在视频中所说的"帮助编译器"时所说的Bjarne Stroustrup.我理解如何&尽可能使用(引用)可以帮助提高程序的效率,但有一件事我不明白是多么const_iterator有用.假设我使用

#include <string>
#include <iostream>

int main()
{
    const std::string s = "Vote for Pat Buchanan in 2016";
    for (std::string::const_iterator i1(s.cbegin()), i2(s.cend()); i1 != i2; ++i1) 
        std::cout << *i1 << std::endl;

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

代替

#include <string>
#include <iostream>

int main()
{
    const std::string s = "Vote for Pat Buchanan in 2016";
    for (std::string::iterator i1(s.begin()), i2(s.end()); i1 != i2; ++i1) 
        std::cout << *i1 << std::endl;

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

两者都有效.前者如何更有效率?如何通过使用const_iteratorgo来迭代字符串比使用常规字符串迭代更快 …

c++

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

当你有一个像:: lower这样的参数时,它在C++中意味着什么?

在诸如如何将std :: string转换为小写的 SO帖子上,我已经看过语法::something,例如

std::transform(data.begin(), data.end(), data.begin(), ::tolower);
Run Code Online (Sandbox Code Playgroud)

而我想知道这意味着什么.我知道std :: transform查找transform名称空间内命名的函数或变量std.但是,当没有第一个参数时,范围运算符意味着什么?

c++

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

如果您创建模板函数但没有使用确定性实例,那么C++编译器会做什么

我知道编写模板函数只是以一般方式编写内容,并且编译器应该根据程序的其余部分编写函数的实际实例.但请考虑以下计划:

#inlcude <time.h>
#include <stdlib.h>
#include <string>

template <typename T> void ptr_swap(T * a, T * b)
{
    T * temp = a; 
    a = b;
    b = temp;
}

int main()
{
     srand(time(NULL));
     std::string s1("Obama"), s2("Hillary");
     int i1(1), i2(69);
     if (rand() & 1 == 1) ptr_swap(&s1, &s2); 
     else ptr_swap(&i1, &i2);
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器如何知道是否为strings或ints 构造ptr_swap函数?它只是确保"为任何事情做好准备",从而编写2个功能

void ptr_swap(std::string * a, std::string * b)
{
    std::string * temp = a; 
    a = b;
    b = temp;
} …
Run Code Online (Sandbox Code Playgroud)

c++

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

const是杀死我的C++程序的疾病.这次发生了什么?

我有一个类似的课程

class HtmlRover
{
public:
    HtmlRover(const std::string::const_iterator &, const std::string::const_iterator &);
    ~HtmlRover();
    // ...
private:
    /...
    std::string::const_iterator _curIter;
    const std::string::const_iterator _offend;
    /...
};
Run Code Online (Sandbox Code Playgroud)

我的编译器抱怨我_offend在构造函数的实现中的实例化:

HtmlRover::HtmlRover(const std::string::const_iterator & it1, const std::string::const_iterator & it2)
{
    _curIter = it1;
    _offend = it2; 
}
Run Code Online (Sandbox Code Playgroud)

它说

No vaiable overload "="
Run Code Online (Sandbox Code Playgroud)

现在我明白这可能与const设置为变量引用的变量有关,但是引用也是const如此,那么问题是什么呢?我知道const变量不能在没有被初始化的情况下存在,但这也不应该是一个问题,因为_offend在初始化HtmlRover对象时正确初始化.

c++

-2
推荐指数
2
解决办法
122
查看次数

标签 统计

c++ ×6

algorithm ×1

github ×1

macos ×1