相关疑难解决方法(0)

在反向迭代向量

我需要迭代从结尾到beginnig的向量."正确"的方式是

for(std::vector<SomeT>::reverse_iterator rit = v.rbegin(); rit != v.rend(); ++rit)
{
    //do Something
}
Run Code Online (Sandbox Code Playgroud)

当doSomething涉及了解实际索引时,需要使用rit进行一些计算以获得它,就像 index = v.size() - 1 - (rit - v.rbegin)

如果无论如何都需要索引,那么我坚信最好使用该索引进行迭代

for(int i = v.size() - 1; i >= 0; --i)
{
    //do something with v[i] and i; 
}
Run Code Online (Sandbox Code Playgroud)

这会发出一个i已签名v.size()且未签名的警告.改为

for(unsigned i = v.size() - 1; i >= 0; --i) 在功能上是错误的,因为这实际上是一个无限循环 :)

什么是美学上很好的方式来做我想做的事情

  • 没有警告
  • 不涉及演员阵容
  • 并不过分冗长

我希望我不是在寻找不存在的东西:)

c++ iteration stl

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

如何在C++中反转字符串向量?

可能重复:
如何反转C++向量?

我有一个字符串向量,我想反转向量并打印它,或者简单地放置,以相反的顺序打印向量.我应该怎么做呢?

c++ printing string vector

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

C++如何反转向量中元素的顺序?

这是我作为C++初学者在本网站上发表的第一篇文章.我的问题很简单.编写一个反转向量中元素顺序的函数.例如,1,3,5,7,9变为9,7,5,3,I.反向函数应产生具有反向序列的新向量,使其原始向量保持不变.

这是我的代码.当我运行它时,"打印"一词后面没有任何内容.我很确定我在某个地方犯了一个愚蠢而简单的错误但却无法理解.将不胜感激任何帮助.欢呼.

void reverse_a(const vector<int>&v1, vector<int>&v2)
{
    //this function creates vector2 with the reverse sequence of elements from vector 1


  for(int i=v1.size()-1;i<=0;--i)

  { 
      v2.push_back(v1[i]);

  }
}

void print(const vector<int>&v)
{
    cout<<"Printing"<<endl;
    for(int i=0;i<v.size();++i)
        cout<<v[i]<<",";
    cout<<"\n"<<"end of print.\n";
}

int main()
{
    vector<int>v1;
    vector<int>v2;
    int input;
    while(cin>>input)
        v1.push_back(input);
    reverse_a(v1,v2);

    print(v2);

    keep_window_open("`");

}
Run Code Online (Sandbox Code Playgroud)

c++ vector

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

强制调用构造函数而不是函数式的强制转换

我有一个自定义的Exception类:

Exception.cc:

#include "Exception.h"


const char* Exception::getMessage()
{
  return strerror(this -> error_code);
}

int Exception::getErrno()
{
  return this -> error_code;
}

Exception::Exception(int errno)
{
  this -> error_code = errno;
}
Run Code Online (Sandbox Code Playgroud)

Exception.hh

#ifndef __EXECPTION_H__
#define __EXECPTION_H__

#include <string.h>

class Exception
{
private:
  int error_code;

public:

    const char* getMessage();

    int getErrno();

  Exception(int errno);
};

#endif
Run Code Online (Sandbox Code Playgroud)

另一个自定义类Buffer,它提供一个逐字节反转缓冲区内容的函数:

Buffer.h:

#ifndef __BUFFER_H__
#define __BUFFER_H__

#include <stdlib.h>
#include <cerrno>

class Buffer
{

private:
  char * buffer;
  int size;


public:
    Buffer(int size);
  ~Buffer();
  void reverse();

    friend class …
Run Code Online (Sandbox Code Playgroud)

c++

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

标签 统计

c++ ×4

vector ×2

iteration ×1

printing ×1

stl ×1

string ×1