C ++访问向量的某个范围的索引

时间:2015-06-23 17:32:00

标签: c++ string vector

我认为我遇到了一个简单的问题,但我无法在任何地方找到解决方案。

我有一个包含很多单词的字符串向量。说第一个元素有 5 字母,但我只想访问第一个 3 字母。我该怎么做?!

std::string test_word = "hou";
std::vector<std::string> words = {"house", "apple", "dog", "tree", ...}

if (test_word == /*(words[0].begin(), words[0].begin()+3)*/) {
...
}

编写它的正确语法方式是什么?

编辑:解决方案

std::string test_word = "hou";
std::vector<std::string> words = {"house", "apple", "dog", "tree", ...}

for (int i = 0; i < words.size(); i++) {
   for (int j = 1; j <= words[i].size(); j++) {
      if (words[i].compare(0,j, test_word) == 0) {
      ...
      }
   }
}

4 个答案:

答案 0 :(得分:3)

if( words[0].compare(0,3, test_word) == 0)

应避免进行不必要的内存分配。

答案 1 :(得分:2)

  

我只想访问第一个..

使用std::string::substr是一种方便的方法,但它可能会导致堆分配。因此,如果您需要表现或想要完全到目标并且只访问这些元素,那么您应该使用std::equal中的algorithm:< / p>

std::equal(words[0].begin(), words[0].begin()+3,
  "text which is not shorter than 3 elements")

还有compare成员函数,正如putnampp所示。

答案 2 :(得分:1)

如果您对std::string特别感兴趣,可以使用substr

if (test_word == words[0].substr(0, 3))

评论中提及的@DanielJour,您也可以使用std::equal

if (std::equal(begin(test_word), begin(test_word) + 3, begin(words[0]))

答案 3 :(得分:1)

  

&#34;说第一个元素有5个字母,但我只想访问前3个字母。我该怎么办?!&#34;

您可以应用std::string::substr()功能来引用前3个字母:

import socket

from server import userlist #<-- error here

class Server():
    def __init__(self,port):