我需要迭代从结尾到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++向量?
我有一个字符串向量,我想反转向量并打印它,或者简单地放置,以相反的顺序打印向量.我应该怎么做呢?
这是我作为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) 我有一个自定义的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)