diff --git a/CommandLineArguments.cxx b/CommandLineArguments.cxx
index d77f83d239622352e37e4f006a62ce622bad4e2b..bdc9e852c99829b018d08c1157c7d77d00951502 100644
--- a/CommandLineArguments.cxx
+++ b/CommandLineArguments.cxx
@@ -244,7 +244,7 @@ int CommandLineArguments::Parse()
         cc ++;
         break;
       case EQUAL_ARGUMENT:
-        if ( arg.size() == sarg.size() || *(arg.c_str() + sarg.size()) != '=' )
+        if ( arg.size() == sarg.size() || arg.at(sarg.size()) != '=' )
           {
           this->Internals->LastArgument --;
           return 0;
diff --git a/Glob.cxx b/Glob.cxx
index 11e206c3fe352dc8c2ba049b922418c880f6f619..6ac6b97f87f8ab1df32e52de4b6d0a0ae76b82fb 100644
--- a/Glob.cxx
+++ b/Glob.cxx
@@ -271,8 +271,7 @@ void Glob::RecurseDirectory(kwsys_stl::string::size_type start,
     else
       {
       if ( !this->Internals->Expressions.empty() &&
-           this->Internals->Expressions[
-             this->Internals->Expressions.size()-1].find(fname.c_str()) )
+           this->Internals->Expressions.rbegin()->find(fname) )
         {
         this->AddFile(this->Internals->Files, realname.c_str());
         }
diff --git a/SystemTools.cxx b/SystemTools.cxx
index d7910f2753fc79a3403d3170eeb56851213d01a0..b19f6f99f52251eeaa7ae2d778d402085e56f990 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -1815,12 +1815,13 @@ void SystemTools::ConvertToUnixSlashes(kwsys_stl::string& path)
     // remove trailing slash if the path is more than
     // a single /
     pathCString = path.c_str();
-    if(path.size() > 1 && *(pathCString+(path.size()-1)) == '/')
+    size_t size = path.size();
+    if(size > 1 && *path.rbegin() == '/')
       {
       // if it is c:/ then do not remove the trailing slash
-      if(!((path.size() == 3 && pathCString[1] == ':')))
+      if(!((size == 3 && pathCString[1] == ':')))
         {
-        path = path.substr(0, path.size()-1);
+        path.resize(size - 1);
         }
       }
     }
@@ -2500,7 +2501,7 @@ kwsys_stl::string SystemTools
       i != path.end(); ++i)
     {
     kwsys_stl::string& p = *i;
-    if(p.empty() || p[p.size()-1] != '/')
+    if(p.empty() || *p.rbegin() != '/')
       {
       p += "/";
       }
@@ -2636,7 +2637,7 @@ kwsys_stl::string SystemTools::FindProgram(
       i != path.end(); ++i)
     {
     kwsys_stl::string& p = *i;
-    if(p.empty() || p[p.size()-1] != '/')
+    if(p.empty() || *p.rbegin() != '/')
       {
       p += "/";
       }
@@ -2732,7 +2733,7 @@ kwsys_stl::string SystemTools
       i != path.end(); ++i)
     {
     kwsys_stl::string& p = *i;
-    if(p.empty() || p[p.size()-1] != '/')
+    if(p.empty() || *p.rbegin() != '/')
       {
       p += "/";
       }
@@ -3073,11 +3074,11 @@ void SystemTools::AddTranslationPath(const char * a, const char * b)
         == kwsys_stl::string::npos )
       {
       // Before inserting make sure path ends with '/'
-      if(!path_a.empty() && path_a[path_a.size() -1] != '/')
+      if(!path_a.empty() && *path_a.rbegin() != '/')
         {
         path_a += '/';
         }
-      if(!path_b.empty() && path_b[path_b.size() -1] != '/')
+      if(!path_b.empty() && *path_b.rbegin() != '/')
         {
         path_b += '/';
         }
@@ -3298,7 +3299,7 @@ kwsys_stl::string SystemTools::RelativePath(const char* local, const char* remot
   for(kwsys_stl::vector<String>::iterator vit1 = finalPath.begin();
       vit1 != finalPath.end(); ++vit1)
     {
-    if(!relativePath.empty() && relativePath[relativePath.size()-1] != '/')
+    if(!relativePath.empty() && *relativePath.rbegin() != '/')
       {
       relativePath += "/";
       }
@@ -3520,10 +3521,10 @@ void SystemTools::SplitPath(const char* p,
         }
       }
 #endif
-    if(!homedir.empty() && (homedir[homedir.size()-1] == '/' ||
-                            homedir[homedir.size()-1] == '\\'))
+    if(!homedir.empty() && (*homedir.rbegin() == '/' ||
+                            *homedir.rbegin() == '\\'))
       {
-      homedir = homedir.substr(0, homedir.size()-1);
+      homedir.resize(homedir.size() - 1);
       }
     SystemTools::SplitPath(homedir.c_str(), components);
     }
@@ -3950,7 +3951,7 @@ bool SystemTools::LocateFileInDir(const char *filename,
         filename_dir_base = SystemTools::GetFilenameName(filename_dir);
 #if defined( _WIN32 )
         if (filename_dir_base.empty() ||
-            filename_dir_base[filename_dir_base.size() - 1] == ':')
+            *filename_dir_base.rbegin() == ':')
 #else
         if (filename_dir_base.empty())
 #endif