C++ ostream 输出操作

2023-11-26

基本上它应该以这种格式列出所有矢量坐标:

(x、y、z)

但目前它确实像这样 (x, y, z, )

最简单的方法是在 for 循环中使用 if ,但是我可以从 out 变量中减去一小段字符串吗?

my code:

    template <unsigned short m>
    std::ostream& operator<<(std::ostream& out, const Vector<m>& v) {
    out << "(";
    for(int i = 0; i < m; i++) {
        out << v.coords[i] << ", ";
    }
    out << ")";
    return out;
}

这是来自我的旧代码库。从好的方面来说:它带有单元测试:

Updated for modern times, more generic and self contained Live On Coliru

/*! note: delimiter cannot contain NUL characters
 */
template <typename Range, typename Value = typename Range::value_type>
std::string Join(Range const& elements, const char *const delimiter) {
    std::ostringstream os;
    auto b = begin(elements), e = end(elements);

    if (b != e) {
        std::copy(b, prev(e), std::ostream_iterator<Value>(os, delimiter));
        b = prev(e);
    }
    if (b != e) {
        os << *b;
    }

    return os.str();
}

/*! note: imput is assumed to not contain NUL characters
 */
template <typename Input, typename Output, typename Value = typename Output::value_type>
void Split(char delimiter, Output &output, Input const& input) {
    using namespace std;
    for (auto cur = begin(input), beg = cur; ; ++cur) {
        if (cur == end(input) || *cur == delimiter || !*cur) {
            output.insert(output.end(), Value(beg, cur));
            if (cur == end(input) || !*cur)
                break;
            else
                beg = next(cur);
        }
    }
}

以及一些相应的单元测试用例:

void testSplit() {
    std::vector<std::string> res;
    const std::string test = "a test ,string, to,,,be, split,\"up,up\",";
    TextUtils::Split(',', res, test);

    UT_EQUAL(10u, res.size());
    UT_EQUAL("a test ", res[0]);
    UT_EQUAL("string", res[1]);
    UT_EQUAL(" to", res[2]);
    UT_EQUAL("", res[3]);
    UT_EQUAL("", res[4]);
    UT_EQUAL("be", res[5]);
    UT_EQUAL(" split", res[6]);
    UT_EQUAL("\"up", res[7]); // Thus making 'split' unusable for parsing
    UT_EQUAL("up\"", res[8]); //  csv files...
    UT_EQUAL("", res[9]);

    TextUtils::Split('.', res, "dossier_id");
    UT_EQUAL(11u, res.size());

    res.clear();
    UT_EQUAL(0u, res.size());

    TextUtils::Split('.', res, "dossier_id");
    UT_EQUAL(1u, res.size());
    std::string UseName = res[res.size() - 1];
    UT_EQUAL("dossier_id", UseName);
}

void testJoin() {
    std::string elements[] = { "aap", "noot", "mies" };

    typedef std::vector<std::string> strings;

    UT_EQUAL(""               , TextUtils::Join(strings(), ""));
    UT_EQUAL(""               , TextUtils::Join(strings(), "bla"));
    UT_EQUAL("aap"            , TextUtils::Join(strings(elements, elements + 1), ""));
    UT_EQUAL("aap"            , TextUtils::Join(strings(elements, elements + 1), "#"));
    UT_EQUAL("aap"            , TextUtils::Join(strings(elements, elements + 1), "##"));
    UT_EQUAL("aapnoot"        , TextUtils::Join(strings(elements, elements + 2), ""));
    UT_EQUAL("aap#noot"       , TextUtils::Join(strings(elements, elements + 2), "#"));
    UT_EQUAL("aap##noot"      , TextUtils::Join(strings(elements, elements + 2), "##"));
    UT_EQUAL("aapnootmies"    , TextUtils::Join(strings(elements, elements + 3), ""));
    UT_EQUAL("aap#noot#mies"  , TextUtils::Join(strings(elements, elements + 3), "#"));
    UT_EQUAL("aap##noot##mies", TextUtils::Join(strings(elements, elements + 3), "##"));
    UT_EQUAL("aap  noot  mies", TextUtils::Join(strings(elements, elements + 3), "  "));

    UT_EQUAL("aapnootmies"    , TextUtils::Join(strings(elements, elements + 3), "\0"));
    UT_EQUAL("aapnootmies"    , TextUtils::Join(strings(elements, elements + 3), std::string("\0" , 1).c_str()));
    UT_EQUAL("aapnootmies"    , TextUtils::Join(strings(elements, elements + 3), std::string("\0+", 2).c_str()));
    UT_EQUAL("aap+noot+mies"  , TextUtils::Join(strings(elements, elements + 3), std::string("+\0", 2).c_str()));
}

See it Live On Coliru

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ ostream 输出操作 的相关文章

  • boost::asio + std::future - 关闭套接字后访问冲突

    我正在编写一个简单的 TCP 客户端来发送和接收单行文本 异步操作由 std future 处理 以便于超时阻塞查询 不幸的是 我的测试应用程序在破坏服务器对象时因访问冲突而崩溃 这是我的代码 TCP客户端 hpp ifndef TCPCL
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi

随机推荐

  • Django ORM 在注释多个聚合列时删除不需要的 Group by

    我想在 django ORM 中创建一个类似这样的查询 SELECT COUNT CASE WHEN myCondition THEN 1 ELSE NULL end as numyear FROM myTable 以下是我编写的 djan
  • Rails 设计,没有路线匹配注销

    尽管有很多类似的问题 但我已经搜索了几个小时但仍然无法解决它 环境 导轨3 0 9 红宝石 1 9 2 设计1 4 2 我使用以下方法更改了默认登录网址 5 resources users 6 devise for users path g
  • 如何在VS2015中构建OpenSSL:x86cpuid.asm是一个空文件

    我需要为使用 VS2015 32 位 的项目构建 OpenSSL 我找到的说明是http developer covenanteyes com building openssl for visual studio 据报道 更新 编辑版本使用
  • 如何在 SwiftUI 中将苹果 ColorPicker 的布局从圆形更改为方形?

    ColorPicker默认的按钮样式是圆形 如下所示 我想将圆形按钮的样式更改为矩形 但似乎没有 API 可以改变它的风格 所以我在它上面放了一个矩形 并将它的 allowedHitTesting 设置为 false 以将单击事件传输到 C
  • 如何实现 DaggerService

    我已经了解了基础知识以及课程 但是对于 dagger 甚至 dagger 2 来说是新手 我不知道应该如何使用它 这是 dagger 意图服务 https google github io dagger api latest dagger
  • 如何将表或行传递给 Postgresql 中的函数?

    这是代码 当前参数类型是数组 但我想传递一个表或行 create or replace function skyband sortedlist rest point returns setof point as declare last x
  • 如何在 C# 中高效处理大量更新对象?

    我正在使用 C 和 XNA 开发 2D 头顶射击游戏 我有一个类 我将其称为 bullet 并且需要每隔几分之一秒更新其中许多实例 我的第一个方法是拥有一个通用的项目符号列表 然后根据需要简单地删除和添加新的项目符号 但在这样做的过程中 G
  • 如何在不使用 setGridLinesVisible() 方法的情况下永久显示 GridPane 对象网格线?

    是否可以使所有GridPane的网格线永久可见而不使用setGridLinesVisible 我知道setGridLinesVisible 仅用于调试目的 我想显示网格线以方便最终用户 另外 我需要在窗格容器而不是画布上工作 我的程序能够在
  • iOS:保存为 PNG 表示数据后图像旋转 90 度

    我已经进行了足够的研究来使其正常工作 但无法修复它 从相机拍照后 只要我将图像存储为 UIImage 就可以了 但是一旦我将此图像存储为 PNG 表示形式 它就会旋转 90 度 以下是我的代码和我尝试过的所有操作 void imagePic
  • 检索或更改伪元素的 CSS 规则

    编辑 2015 10 07 1624 CST 这个问题已被标记为可能重复 我发布它的原因是其他问题的答案都没有提供我想要的所有信息 我想要一种简单而直接的方法来做到这一点 我可以负责控制样式表和规则的顺序 以便引用正确的规则 我还希望得到关
  • 为什么 jQuery 不自动附加 JSONP 回调?

    The getJSON 文档指出 如果指定的 URL 位于远程服务器上 则该请求将被视为 JSONP 请参阅 的讨论jsonp ajax 中的数据类型以获取更多详细信息 The ajax 的文档jsonp数据类型状态 强调我的 使用 JSO
  • 如何引用命名 Excel 表格中的最后一行?

    我目前正在尝试格式化表格的一列 以便如果另一列中存在任何匹配的名称 则原始列中的单元格将突出显示 这是我的意思的一个例子 第 10 行具有 M6A1 的先决条件 但是 第 11 行的名称为 M6A1 我希望第 10 行的 M6A1 突出显示
  • WCF 中的 mexTcpBinding - IMetadataExchange 错误

    我想让 WCF over TCP 服务正常工作 我在修改自己的项目时遇到了一些问题 因此我想从 VS2008 中包含的 基本 WCF 模板开始 这是初始的 WCF App config 当我运行该服务时 WCF 测试客户端可以正常使用它
  • RODBC 在 sqlQuery() 的连接中使用 Data.Frame

    有没有办法使用 sqlQuery 在 JOIN 条件下使用 data frame 我正在使用 RODBC 连接到 SQL Server 并且需要根据 R 中已有的 data frame 限制初始结果集 因此它仅返回 200 000 条记录中
  • 是否可以以某种方式在表格行周围设置边框?

    我试图在特定的表格行周围添加边框 当鼠标进入该行时 它会改变它的颜色 但是 除非使用 否则我根本看不到边框border collapse collapse 但我必须避免边框折叠 因为在某些情况下 边框在左侧 右侧和底部可见 但在顶部不可见
  • 如何防止 NUL 字节出现在我的 GIT 存储库和提交消息中?

    我有一个相对干净的 Mac OS X Mavericks 10 9 安装 运行 git 版本 1 8 5 1 我的文件位于已安装的 SMB 共享上 并且我无法再正常使用我的 GIT 存储库 因为 NULL 字节 0 不断出现在我的所有版本控
  • 如何用线性无关列在矩阵中编写线性相关列?

    我有一个很大的 mxn 矩阵 并且我已经确定了线性相关的列 但是 我想知道 R 中是否有一种方法可以根据线性独立列来编写线性相关列 由于它是一个很大的矩阵 因此不可能基于检查来完成 这是我拥有的矩阵类型的玩具示例 gt mat lt mat
  • F# 在同一项目的另一个文件中定义/使用类型/模块

    希望这将是一件容易的事 我有一个 F 项目 最新的 F CTP 其中包含两个文件 Program fs Stack fs 在 Stack fs 中 我有一个简单的命名空间和类型定义 Stack fs namespace Col type S
  • 执行库(pkg)后执行包中的函数

    您好 我有一个包 其中包含一个使用 gWidgets 制作 gui 的函数 有没有办法让我在包加载时执行该函数 以便立即出现界面 我想是这样的 OnAttach lt function libname pkgname gui 会起作用 但我
  • C++ ostream 输出操作

    基本上它应该以这种格式列出所有矢量坐标 x y z 但目前它确实像这样 x y z 最简单的方法是在 for 循环中使用 if 但是我可以从 out 变量中减去一小段字符串吗 my code template